Frage

In meiner Lektüre auf dynamische und statische Typisierung, ich komme immer gegen die Annahme auf, dass statisch typisierten Sprachen kompiliert werden, während dynamisch typisierten Sprachen interpretiert werden. Ich weiß, dass im Allgemeinen das ist wahr, aber ich bin in der Ausnahme interessiere.

Ich mag wirklich jemand nicht nur ein paar Beispiele für diese Ausnahmen geben, aber versuchen zu erklären, warum es wurde beschlossen, dass diese Sprachen auf diese Weise funktionieren sollen.

War es hilfreich?

Lösung

Hier ist eine Liste von einem paar interessanten Systemen. Es ist nicht Anspruch auf Vollständigkeit!

dynamisch typisierten und kompiliert

  1. Der Compiler Gambit Scheme, Chez Scheme , Will Clinger des Larceny Scheme-Compiler, die Bigloo Scheme Compiler, und wahrscheinlich viele andere.

      

    Warum?

    Viele Leute wirklich wie Scheme. Programme als Daten, gutes Makro-System, 35 Jahre der Entwicklung, große Gemeinschaft. Aber sie wollen Leistung. Daher ist eine Reihe von guten nativen Code-Compiler-Chez Scheme ist auch ein erfolgreiches Produkt (interpretiert Bytecodes sind frei, native Codes Sie bezahlen).

  2. Die luajit Just-in-Time-Compiler für Lua .

      

    Warum?

    Um es zu zeigen, könnte getan werden. Und dann begannen die Menschen zu wie 3x Speedup auf ihre Lua-Programme zu bekommen. Lua ist in einer Menge von Spielen, in denen die Leistung zählt, und es wird in anderen Produkten auch schleichend. 70% des Codes in Adobe Lightroom ist Lua.

  3. Die iconc Icon -bis-C-Compiler.

      

    Warum?

    Die fünfzig Menschen, die es verwendet geliebt Icon. Völlig ungewöhnlich Bewertungsmodell, das innovativste (und meiner Meinung nach, am besten) string-Verarbeitungssystem je entwickelt wird. Aber das Bewertungsmodell war sehr teuer, vor allem am Ende der 1980er Jahre Computer. Durch die Erstellung Icon auf C machte das Icon-Projekt es möglich, große Icon-Programme in weniger Stunden laufen.

Fazit : Menschen zuerst eine Bindung an eine dynamisch typisierte Sprache entwickeln, und wahrscheinlich eine bedeutende Codebasis. Schließlich Compiler die Gemeinde spuckt eine native-Code, so dass Sie eine bessere Leistung erhalten und größere Probleme lösen.

Statisch typisiert und interpretiert

Diese Kategorie ist weniger verbreitet, aber ...

  1. Objective Caml . Dialect von ML, Fahrzeug für viel innovativer Experimente in Sprache Design.

      

    Warum?

    Sehr tragbares System und sehr schnelle Übersetzungszeiten. Menschen wie die beiden Eigenschaften, so werden die neuen Sprach-Design-Ideen desseminated weit.

  2. Moskau ML. Standard ML mit einigen zusätzlichen Funktionen der Module System.

      

    Warum?

    Tragbare, schnelle Kompilierungszeiten, einfach ein interaktives Lese- / eval / drucken Schleife zu machen. Wurde zu einem beliebten Lehre Compiler.

  3. C-Terp. Ein altes Produkt, ich denke, vielleicht von Gimpel Software. Sabre C-a Produkt Ich glaube nicht, dass Sie nicht mehr kaufen können.

      

    Warum?

    Debuggen. Insbesondere das Debuggen auf der 1980er Jahre Hardware unter MS-DOS. Für sehr wenig Ressourcen, könnte man wirklich gute Hilfe C-Code Debuggen auf sehr begrenzte Hardware bekommen (man denkt: 4.77MHz Prozessor mit einem 8-Bit-Bus, 640 KB RAM voll geladen). Fast unmöglich, einen guten visuellen Debugger für native-kompilierten Code zu bekommen, aber mit dem Dolmetscher, ziemlich einfach.

  4. UCSD Pascal-System, das das "P-Code" ein Begriff aus.

      

    Warum?

    mochte Lehrer Niklaus Wirth Sprache Design und der Compiler laufen konnte auf sehr Kleinmaschinen. Wirths klares Design und das UCSD P-System aus einer unschlagbaren Kombination, und Pascal war die Standardlehrsprache der 1970er Jahre. Jüngere Menschen können es schwer zu erkennen, feststellen, dass es in den 1970er Jahren war nicht Debatte über das, was Sprache zu lehren in dem ersten Kurs. Heute weiß ich von Programmen unter Verwendung von C, C ++, Haskell, Java, ML und Schema. In den 1970er Jahren war es immer Pascal und der UCSD P-System war ein großer Grund, Art und Weise.

    Falls Sie sich fragen, P stand für portable .

Zusammenfassung : eine statisch typisierte Sprache Dolmetschen ist eine gute Möglichkeit, schnell eine Implementierung in jedermanns Hände zu bekommen. (Er hatte auch Vorteile für das Debuggen auf Bronzezeit-Hardware.)

Andere Tipps

Objective-C zusammengestellt und unterstützt die dynamische Typisierung (sicherlich, wenn Methoden über [target doSomething] Syntax Aufruf). Das heißt, können Sie eine beliebige Nachricht an ein Ziel senden (gewöhnliche Sprachsyntax verwenden, ohne die Programmierung gegen eine Reflexion API), erhalten nur eine Warnung bei der Kompilierung, dass es nicht behandelt werden könnten, und erhalten eine Ausnahme nur zur Laufzeit, wenn das Ziel doesn ‚t reagieren auf diesen Wähler (die wie eine Methodensignatur ist); und Sie können jedes Objekt fragen (die alle statischen Typ id sein kann, wenn der Code nicht besser weiß oder kümmert sich nicht), ob es respondsToSelector: seine Fähigkeiten zu sondieren.

Java (eine statisch typisierte Sprache) auf JVM-Bytecode kompiliert, die auf älteren Versionen des JVM interpretiert wurden, während es jetzt verwendet Just In Time (JIT) Kompilierung, dh Maschinencode zur Laufzeit erzeugt wird. Ich glaube auch, ML und seine Dialekte interpretiert werden können, und ML ist auf jeden Fall statisch typisiert.

Action hat dynamische Typisierung und compiliert zu Bytecode.

Und es stellt sogar bis in nativen Maschinencode, wenn Sie eine Flash-Anwendung auf dem iPhone freigeben möchten.

scroll top