Principalmente questa è una coincidenza.
I linguaggi di programmazione si sono evoluti nel tempo e la tecnologia dei compilatori e degli interpreti è migliorata. L'efficienza dell'elaborazione sottostante (ovvero il tempo di compilazione, le spese generali di interpretazione, i tempi di esecuzione ecc.) È anche meno importante poiché le piattaforme di elaborazione tradizionali sono cresciute di potenza.
La sintassi del linguaggio ha un impatto - per esempio, Pascal era molto attentamente progettato in modo che possa utilizzare un unico compilatore passaggio - vale a dire passare uno sopra l'origine e si dispone di codice macchina excutable. Ada d'altra parte non ha prestato attenzione a questo, e i compilatori Ada sono notoriamente difficili da scrivere - la maggior parte richiede più di un passaggio. (Un ottimo compilatore di Ada che ho usato molti anni fa era un compilatore a 8 passaggi. Come puoi immaginare, è stato molto lento.)
Se guardi vecchie lingue come Fortran (compilato) e BASIC (interpretato o compilato) hanno / avevano sintassi e regole semantiche molto rigide. [Nel caso di BASIC, questo non è il vecchio BASIC di fatture, è necessario tornare prima all'originale.]
D'altra parte, guardando altre cose più vecchie come APL (un bel po 'di divertimento) questo aveva una specie di tipizzazione dinamica. Inoltre è stato generalmente interpretato ma potrebbe anche essere compilato.
La sintassi lenitiva è difficile - se ciò significa che hai cose che sono opzionali o che possono essere dedotte, allora significa che la lingua ha una ricchezza sufficiente da poter essere abbattuta. Ancora una volta, BASIC l'ha avuto molti anni fa quando la dichiarazione "LET" è diventata facoltativa!
Molte delle idee che vedi ora (ad esempio, la tipizzazione senza testo o dinamica) sono in realtà molto vecchie - appaiono per la prima volta negli anni '70 o all'inizio degli anni '80. Il modo in cui vengono utilizzati e le lingue in cui vengono utilizzate queste idee è cambiato e cresciuto. Ma fondamentalmente, gran parte delle novità sono in realtà cose vecchie vestite con abiti nuovi.
Ecco alcuni esempi dalla parte superiore della mia testa:
- APL: digitazione dinamica. Generalmente interpretato È venuto dagli anni '60 / '70.
- BASIC: digitazione forte o dinamica. Interpretato o compilato. Anni '70 e molti altri.
- Fortran: digitazione forte. Compilato. Anni '60 o precedenti.
- Algol68: tipizzazione forte. Compilato. 1960.
- PL / 1: tipizzazione forte. Compilato. 1960.
- Pascal: digitazione forte. Compilato. 1970. (Ma negli anni '80 c'erano compilatori P-System molto simili ai compilatori JIT!)
- Alcune implementazioni di Fortran e altre da parte di DEC all'inizio furono parzialmente compilate e parzialmente interpretate.
- Smalltalk: digitazione dinamica. Compilato in bytecode che viene interpretato. 1980.
- Prolog: più stranezza. Funzionale. Compilato (Turbo Prolog, qualcuno?). 1980.
- C: digitazione forte (ah ah). Compilato. 1960's..today.
- Ada: tipizzazione super forte. Compilato. 1980.
- Perl: digitazione dinamica. (Sintassi forte). Interpretato. 1990 (?).
Potrei andare avanti.
- Angolo di Nitpickers: molte lingue interpretate sono tokenizzate o "compilate in byte" nel momento in cui la sorgente viene caricata / letta. Questo rende molto più semplice l'operazione successiva dell'interprete. A volte è possibile salvare la versione del codice compilata in byte. A volte non puoi. È ancora interpretato.
Aggiornamento: perché non ero abbastanza chiaro.
La digitazione può variare notevolmente.
La tipizzazione statica fissa in fase di compilazione è comune (ad esempio, C, Ada, C ++, Fortan, ecc. Ecc.). Qui è dove dichiari una COSA di un TIPO ed è così per sempre.
È anche possibile avere una digitazione dinamica, in cui l'oggetto prende il tipo che gli è assegnato. Ad esempio, PHP e alcuni BASIC iniziali e APL, in cui si assegnerebbe un numero intero a una variabile e da quel momento in poi sarà un tipo intero. Se in seguito gli hai assegnato una stringa, allora era un tipo di stringa. E così via.
E poi c'è la digitazione libera, ad esempio PHP in cui puoi fare cose davvero bizzarre come assegnare un numero intero (citato, quindi è una stringa) a una variabile e quindi aggiungere un numero ad esso. (es. '5' + 5 comporterebbe 10). Questa è la terra del bizzarro, ma a volte anche molto utile.
TUTTAVIA queste sono funzionalità progettate in una lingua. L'implementazione lo rende possibile.