Chủ yếu đây là một sự trùng hợp.
Ngôn ngữ lập trình đã phát triển theo thời gian và công nghệ trình biên dịch và phiên dịch đã được cải thiện. Hiệu quả của xử lý cơ bản (tức là thời gian biên dịch, chi phí phiên dịch, thời gian thực hiện, v.v.) cũng ít quan trọng hơn vì các nền tảng điện toán chính thống đã phát triển mạnh mẽ.
Cú pháp ngôn ngữ không có tác động - ví dụ, Pascal được thiết kế rất cẩn thận để nó có thể sử dụng một trình biên dịch thông qua duy nhất - tức là vượt qua một trong những nguồn và bạn có mã máy excutable. Mặt khác, Ada không chú ý đến điều này và trình biên dịch Ada nổi tiếng là khó viết - hầu hết yêu cầu nhiều hơn một lần vượt qua. (Một trình biên dịch Ada rất tốt mà tôi đã sử dụng nhiều năm trước là trình biên dịch 8 pass. Như bạn có thể tưởng tượng, nó rất chậm.)
Nếu bạn nhìn vào các ngôn ngữ cũ như Fortran (được biên dịch) và BASIC (được giải thích hoặc biên dịch) thì chúng có / có các quy tắc ngữ nghĩa và ngữ nghĩa rất nghiêm ngặt. [Trong trường hợp BASIC, đó không phải là hóa đơn BASIC cũ, bạn cần quay lại trước đó với bản gốc.]
Mặt khác, nhìn vào những thứ cũ hơn như APL (một trò vui), kiểu này có kiểu gõ động. Nó cũng thường được giải thích nhưng cũng có thể được biên dịch.
Cú pháp Lenient là một câu hỏi khó - nếu điều đó có nghĩa là bạn có những thứ không bắt buộc hoặc có thể được suy ra thì điều đó có nghĩa là ngôn ngữ có đủ độ phong phú mà nó có thể bị loại bỏ. Sau đó, một lần nữa, BASIC đã có điều đó từ nhiều năm trước khi tuyên bố "LET" trở thành tùy chọn!
Nhiều ý tưởng mà bạn thấy bây giờ (ví dụ, kiểu chữ không gõ hoặc động) thực sự rất cũ - xuất hiện lần đầu tiên vào những năm 1970 hoặc đầu những năm 1980. Cách chúng được sử dụng và ngôn ngữ mà những ý tưởng này được sử dụng đã thay đổi và phát triển. Nhưng về cơ bản, phần lớn những gì mới thực sự là những thứ cũ mặc quần áo mới.
Dưới đây là một số ví dụ ngoài đỉnh đầu của tôi:
- APL: gõ động. Nói chung là diễn giải. Đến từ những năm 1960/1970.
- CƠ BẢN: gõ mạnh mẽ hoặc năng động. Giải thích hoặc biên soạn. 1970 và nhiều hơn nữa.
- Fortran: gõ mạnh. Tổng hợp. Những năm 1960 hoặc sớm hơn.
- Algol68: đánh máy mạnh. Tổng hợp. Những năm 1960.
- PL / 1: gõ mạnh. Tổng hợp. Những năm 1960.
- Pascal: đánh máy mạnh. Tổng hợp. Những năm 1970. (Nhưng vào những năm 1980, có trình biên dịch P-System rất giống với trình biên dịch JIT!)
- Một số triển khai của Fortran và những người khác của DEC trong những ngày đầu đã được biên soạn một phần và diễn giải một phần.
- Smalltalk: gõ động. Được biên dịch thành mã byte được giải thích. Những năm 1980
- Prolog: lạ hơn. Chức năng. Biên dịch (Turbo Prolog, có ai không?). Những năm 1980
- C: gõ mạnh (ha ha). Tổng hợp. Năm 1960..Hôm nay.
- Ada: gõ mạnh mẽ. Tổng hợp. Những năm 1980
- Perl: gõ động. (Cú pháp mạnh). Giải thích. Những năm 1990 (?).
Tôi có thể tiếp tục.
- Góc Nitopperers: Nhiều ngôn ngữ được giải thích được mã hóa hoặc "biên dịch byte" tại thời điểm nguồn được tải / đọc. Điều này làm cho hoạt động tiếp theo của trình thông dịch đơn giản hơn rất nhiều. Đôi khi bạn có thể lưu phiên bản được biên dịch byte của mã. Đôi khi bạn không thể. Nó vẫn giải thích.
Cập nhật: Bởi vì tôi không đủ rõ ràng.
Gõ có thể rất khác nhau.
Kiểu gõ tĩnh cố định thời gian biên dịch là phổ biến (ví dụ: C, Ada, C ++, Fortan, v.v.). Đây là nơi bạn tuyên bố một THING của LOẠI và nó là như vậy mãi mãi.
Cũng có thể có kiểu gõ động, trong đó thứ chọn ra loại được gán cho nó. Ví dụ, PHP và một số BASIC đầu tiên và APL, nơi bạn sẽ gán một số nguyên cho một biến và từ đó trở đi là một kiểu số nguyên. Nếu sau này bạn đã gán một chuỗi cho nó, thì đó là một loại chuỗi. Và như thế.
Và sau đó là việc gõ lỏng lẻo, ví dụ PHP, nơi bạn có thể thực hiện những việc thực sự kỳ lạ như gán một số nguyên (được trích dẫn, do đó là một chuỗi) cho một biến và sau đó thêm một số vào đó. (ví dụ: '5' + 5 sẽ dẫn đến 10). Đây là vùng đất kỳ quái, nhưng cũng có lúc rất hữu ích.
TUY NHIÊN đây là những tính năng được thiết kế thành ngôn ngữ. Việc thực hiện chỉ làm cho điều đó xảy ra.