Per lo più 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 (ossia il tempo di compilazione, l'overhead di interpretazione, il tempo di esecuzione ecc.) È anche meno importante in quanto le piattaforme di elaborazione mainstream sono cresciute al potere.
La sintassi della lingua ha ha un impatto - ad esempio, Pascal è stato progettato con molta attenzione in modo da poter utilizzare un compilatore a passaggio singolo, vale a dire un passaggio sull'origine e un 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 Ada che ho utilizzato molti anni fa era un compilatore a 8 passaggi. Come puoi immaginare, è stato molto lento.)
Se guardi a linguaggi vecchi come Fortran (compilato) e BASIC (interpretato o compilato) hanno / hanno una sintassi molto severa e regole semantiche. [Nel caso di BASIC, questo non è Bills vecchio BASIC, è necessario tornare prima di quello all'originale.]
D'altra parte, guardando altre cose più vecchie come APL (un sacco di divertimento) questo ha avuto una digitazione dinamica, di sorta. Inoltre è stato generalmente interpretato ma potrebbe essere compilato anche.
La sintassi clemente è difficile - se ciò significa che hai cose che sono opzionali o che puoi dedurre, significa che il linguaggio ha una ricchezza sufficiente da poter essere abbattuto. Poi di nuovo, BASIC ha avuto tanti anni fa quando la dichiarazione "LET" divenne opzionale!
Molte delle idee che ora vedi (ad esempio, digitazione senza tipizzazione o dinamica) sono in realtà molto vecchie, per la prima volta negli anni '70 o all'inizio degli anni '80. Il modo in cui vengono utilizzati e le lingue in cui queste idee sono usate sono cambiate e cresciute. Ma fondamentalmente, gran parte di ciò che è nuovo è in realtà roba vecchia vestita con abiti nuovi.
Ecco alcuni esempi in cima alla mia testa:
- APL: digitazione dinamica. Generalmente interpretato. È venuto dagli anni '60 / '70.
- BASIC: digitazione strong o dinamica. Interpretato o compilato. Anni '70 e molti altri.
- Fortran: strong tipizzazione. Compilato. Anni '60 o precedenti.
- Algol68: strong tipizzazione. Compilato. 1960.
- PL / 1: strong tipizzazione. Compilato. 1960.
- Pascal: strong tipizzazione. Compilato. 1970. (Ma negli anni '80 c'erano compilatori P-System molto simili ai compilatori JIT!)
- Alcune implementazioni di Fortran e altri di DEC nei primi giorni sono state parzialmente compilate e parzialmente interpretate.
- Smalltalk: digitazione dinamica. Compilato in bytecode che viene interpretato. 1980.
- Prolog: più stranezza. Funzionale. Compilato (Turbo Prolog, nessuno?). 1980.
- C: strong (ah ah) digitando. Compilato. 1960's..today.
- Ada: digitazione strong. Compilato. 1980.
- Perl: digitazione dinamica. (strong sintassi). Interpretato. Anni '90 (?).
Potrei andare avanti.
- Angolo Nitpickers: molti linguaggi interpretati vengono tokenizzati o "byte compilati" nel momento in cui la fonte viene caricata / letta. Questo rende molto più semplice la successiva operazione 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 si dichiara una COSA di un TIPO ed è così per sempre.
È anche possibile avere una digitazione dinamica, in cui la cosa preleva il tipo che gli viene assegnato. Ad esempio, PHP e alcuni primi BASIC e APL, dove si assegnerebbe un intero a una variabile e da quel momento in poi era un tipo intero. Se in seguito hai assegnato una stringa, era un tipo di stringa. E così via.
E poi c'è una digitazione libera, ad esempio PHP, dove puoi fare cose veramente bizzarre come assegnare un numero intero (quotato, quindi una stringa) ad una variabile e poi aggiungere un numero ad esso. (es. '5' + 5 risulterebbe in 10). Questa è la terra del bizzarro, ma anche a volte molto molto utile.
TUTTAVIA queste sono funzionalità progettate in una lingua. L'implementazione rende solo questo possibile.