Meistens ist das ein Zufall.
Die Programmiersprachen haben sich im Laufe der Zeit weiterentwickelt und die Technologie von Compilern und Dolmetschern hat sich verbessert. Die Effizienz der zugrunde liegenden Verarbeitung (dh die Kompilierungszeit, der Interpretationsaufwand, die Ausführungszeit usw.) ist ebenfalls weniger wichtig, da die Leistung der Mainstream-Computerplattformen zugenommen hat.
Die Sprachsyntax hat einen Einfluss - Pascal wurde zum Beispiel sehr sorgfältig entworfen, damit ein Compiler mit einem Durchgang verwendet werden kann - dh ein Durchgang über die Quelle und Sie haben einen ausführbaren Maschinencode. Ada hingegen achtete nicht darauf, und Ada-Compiler sind bekanntermaßen schwer zu schreiben - die meisten erfordern mehr als einen Durchgang. (Ein sehr guter Ada-Compiler, den ich vor vielen Jahren verwendet habe, war ein 8-Pass-Compiler. Wie Sie sich vorstellen können, war er sehr langsam.)
Wenn Sie sich alte Sprachen wie Fortran (kompiliert) und BASIC (interpretiert oder kompiliert) ansehen, haben / hatten sie sehr strenge Syntax- und Semantikregeln. [Im Fall von BASIC, das ist nicht Bills altes BASIC, müssen Sie vorher zum Original zurückkehren.]
Bei älteren Dingen wie APL (ein Haufen Spaß) war dies eine Art dynamisches Tippen. Es wurde auch allgemein interpretiert, konnte aber auch kompiliert werden.
Lenient-Syntax ist eine schwierige Sache. Wenn Sie also Dinge haben, die optional sind oder die abgeleitet werden können, bedeutet dies, dass die Sprache über einen ausreichenden Reichtum verfügt, den sie aussortieren könnte. Andererseits hatte BASIC das vor vielen Jahren, als die Anweisung "LET" optional wurde!
Viele der Ideen, die Sie jetzt sehen (z. B. typenloses oder dynamisches Tippen), sind tatsächlich sehr alt - sie tauchen erstmals in den 1970er oder frühen 1980er Jahren auf. Die Art und Weise, wie sie verwendet werden, und die Sprachen, in denen diese Ideen verwendet werden, haben sich geändert und sind gewachsen. Aber im Grunde genommen ist vieles, was neu ist, altes Zeug in neuen Kleidern.
Hier sind einige Beispiele aus meinem Kopf:
- APL: Dynamische Eingabe. Generell interpretiert. Kam aus den 1960er / 1970er Jahren.
- BASIC: Starkes oder dynamisches Tippen. Ausgelegt oder übersetzt. 1970er Jahre und viele darüber hinaus.
- Fortran: starkes Tippen. Kompiliert. 1960er oder früher.
- Algol68: starkes Tippen. Kompiliert. 1960er Jahre.
- PL / 1: starkes Tippen. Kompiliert. 1960er Jahre.
- Pascal: starkes Tippen. Kompiliert. 1970er Jahre. (Aber in den 1980er Jahren gab es P-System-Compiler, die den JIT-Compilern sehr ähnlich waren!)
- Einige Implementierungen von Fortran und andere von DEC in den frühen Tagen wurden teilweise kompiliert und teilweise interpretiert.
- Smalltalk: Dynamische Eingabe. Kompiliert zu Bytecode, der interpretiert wird. 1980er Jahre.
- Prolog: mehr Fremdheit. Funktional. Kompiliert (Turbo Prolog, jemand?). 1980er Jahre.
- C: starkes (ha ha) Tippen. Kompiliert. 1960er ... heute.
- Ada: Überstarkes Tippen. Kompiliert. 1980er Jahre.
- Perl: Dynamische Eingabe. (Starke Syntax). Interpretiert. 1990er Jahre (?).
Ich könnte weitermachen.
- Nitpickers-Ecke: Viele interpretierte Sprachen werden zum Zeitpunkt des Ladens / Einlesens der Quelle mit einem Token versehen oder "bytekompiliert". Dies erleichtert die spätere Bedienung des Interpreters erheblich. Manchmal können Sie die Byte-kompilierte Version des Codes speichern. Manchmal kannst du nicht. Es ist immer noch interpretiert.
Update: Weil ich nicht klar genug war.
Die Eingabe kann sehr unterschiedlich sein.
Feste statische Typisierung zur Kompilierungszeit ist üblich (z. B. C, Ada, C ++, Fortan usw. usw.). Hier deklarieren Sie eine SACHE eines TYPS und das ist für immer so.
Es ist auch möglich, dynamisch zu tippen, wobei das Ding den ihm zugewiesenen Typ aufnimmt. Zum Beispiel PHP und einige frühe BASIC- und APL-Versionen, bei denen Sie einer Variablen eine Ganzzahl zuweisen und von da an eine Ganzzahl. Wenn Sie ihm später eine Zeichenfolge zugewiesen haben, war dies ein Zeichenfolgentyp. Und so weiter.
Und dann gibt es loses Tippen, zum Beispiel PHP, wo Sie wirklich bizarre Dinge tun können, wie einer Variablen eine numerische Ganzzahl (in Anführungszeichen gesetzt, also eine Zeichenfolge) zuweisen und dann eine Zahl hinzufügen. (zB '5' + 5 würde 10 ergeben). Dies ist das Land der bizarren, aber auch zuweilen sehr sehr nützlichen.
Dies sind jedoch Funktionen, die in einer Sprache erstellt wurden. Die Implementierung macht das einfach möglich.