Переважно це збіг обставин.
З часом розвиваються мови програмування, а технологія компіляторів та перекладачів вдосконалюється. Ефективність базової обробки (тобто час компіляції, накладні витрати на переклад, час виконання тощо) також має менш важливе значення, оскільки основні обчислювальні платформи зростають у силі.
Синтаксис мови робить впливає - наприклад, Паскаль був дуже ретельно розроблений таким чином , він може використовувати один прохід компілятор - тобто один прохід над джерелом і у вас є excutable машинного коду. Ada з іншого боку не звертала на це уваги, а компілятори Ada, як відомо, важко написати - для більшості потрібен більше одного проходу. (Один дуже хороший компілятор Ada, яким я користувався багато років тому, був 8-прохідний компілятор. Як ви можете собі уявити, це було дуже повільно.)
Якщо ви подивитесь на старі мови, такі як Fortran (компільований) та BASIC (інтерпретований або складений), у них є / були дуже суворі синтаксис та семантичні правила. [У випадку з BASIC, це не векселі старого BASIC, вам потрібно повернутися до цього до оригіналу.]
З іншого боку, дивлячись на інші старі речі, такі як APL (купа задоволення), це було динамічним набором тексту. Він також загалом був інтерпретований, але також міг бути складений.
Синтаксис поблажливий - якщо це означає, що у вас є речі, які є необов'язковими або можна зробити висновок, то це означає, що мова має достатнє багатство, щоб її можна було знищити. Знову ж таки, BASIC мав це багато років тому, коли заява "LET" стала необов'язковою!
Багато ідей, які ви зараз бачите (наприклад, безтипові або динамічні набори тексту), насправді дуже давні - вперше з'явилися в 1970-х або на початку 1980-х. Спосіб їх використання та мови, якими вони користуються, змінювались та зростали. Але принципово, що багато нового є насправді старі речі, одягнені в новий одяг.
Ось декілька прикладів у верхній частині моєї голови:
- APL: динамічне введення тексту. Взагалі трактується. Походив з 1960-х / 1970-х років.
- ОСНОВНІ: сильний або динамічний набір тексту. Інтерпретовано або складено. 1970-ті та багато інших.
- Фортран: сильний набір тексту. Складено. 1960-х років або раніше.
- Algol68: сильний набір тексту. Складено. 1960-ті.
- PL / 1: сильний набір тексту. Складено. 1960-ті.
- Паскаль: сильний набір тексту. Складено. 1970-ті. (Але в 1980-х роках були компілятори P-System, дуже схожі на компілятори JIT!)
- Деякі реалізації Fortran та інших за допомогою DEC в перші дні були частково складені та частково інтерпретовані.
- Маленька розмова: динамічне введення тексту. Скомпільований у байт-код, який інтерпретується. 1980-ті.
- Пролог: більше дивацтв. Функціональний. Складено (Turbo Prolog, хто?). 1980-ті.
- С: сильний (ха-ха) набір тексту. Складено. 1960-х рр .. сьогодні.
- Ада: убер-сильний набір тексту. Складено. 1980-ті.
- Perl: динамічне введення тексту. (Сильний синтаксис). Інтерпретовано. 1990-х (?).
Я міг би продовжувати.
- Куточок Nitpickers: Багато інтерпретованих мов токенізовано або "байт складений" під час завантаження / читання джерела. Це робить подальшу роботу перекладача набагато простішою. Іноді ви можете зберегти скомпільовану байтом версію коду. Іноді ти не можеш. Її досі інтерпретують.
Оновлення: Тому що я був недостатньо зрозумілий.
Введення тексту може сильно відрізнятися.
Стаціонарне типізування за часом компіляції є загальним (наприклад, C, Ada, C ++, Fortan тощо тощо). Тут декларується ТІНКА ТИПУ, і саме так назавжди.
Можливо також динамічне введення тексту, коли річ підбирає тип, який їй призначений. Наприклад, PHP і деякі початкові BASIC, і APL, де ви призначили цілу величину змінній, і з цього моменту вона була цілим числом. Якщо ви згодом призначили йому рядок, то це був тип рядка. І так далі.
І тоді відбувається друге введення тексту, наприклад, PHP, де ви можете робити справді химерні речі, такі як присвоєння числовому цілому числу (цитується, таким чином, його рядок) змінній, а потім додайте до неї число. (наприклад, "5" + 5 призведе до 10). Це країна химерної, але також часом дуже корисної.
ЯКЩО це функції, вбудовані в мову. Реалізація просто робить це.