Zur Verwendung mit einer Klasse, die ich unterrichten werde, suche ich nach einem schnellen Compiler oder Bytecode-Interpreter für Standard ML. Ich suche nach schnellen Kompilierzeiten; reicht jede vernünftige Laufzeit aus. Bonus, wenn das Kompilierungsmodell einfach und klar ist. Schüler in der Klasse werden auch MLton verwenden, um gute Binärdateien zu erzeugen, aber MLton ist langsam zu kompilieren und es gibt Zeiten, in denen Schüler etwas brauchen, mit dem sie interagieren können.
Hier ist, was ich schon weiß:
Standard ML von New Jersey hat eine interaktive read-eval-print-Schleife, aber seine Kompilierungsregeln sind etwas komisch, und es ist ein bisschen langsam. Dennoch könnte es der führende Anwärter sein.
Moskau ML war früher ideal, aber noch wurde nicht mit der Standard Basis Library 2004 auf den neuesten Stand gebracht. Sehr bedauerlich, weil Moskau ML neben seinen vielen anderen guten Eigenschaften auch ein interaktives Hilfesystem hat - aber ich kann meinen Studenten keinen Compiler zufügen, dessen Bibliotheken etwas anderes machen, als die gesamte Online-Dokumentation sagt.
Poly / ML passt vielleicht zu der Rechnung, außer dass ich mir die Dokumentation online ansehe, ich kann nicht herausfinden, wie man sie kompiliert. Das könnte OK sein.
Momentan sieht es so aus, als ob entweder SML / NJ oder Poly / ML der beste Kompromiss wäre. Es ist viele Jahre her, dass ich ernsthaft an Standard ML gearbeitet habe, und ich würde gerne Informationen über andere Compiler erhalten oder welche dieser Alternativen ist nach Ihrer Erfahrung am schnellsten zu interagieren und am einfachsten zu erlernen.
Poly / ML scheint etwas schneller zu sein als SML / NJ. Zum Beispiel das Kompilieren von HaMLet (ca. 25850 Zeilen kommentierter SML) mit Poly / ML, SML / NJ , und MLton, bekomme ich folgendes:
%Vor%Der Unterschied zwischen Poly / ML und SML / NJ ist beim Kompilieren von MLton (ca. 175779 Zeilen der kommentierten SML) nicht ganz so ausgeprägt:
%Vor% Als REPL sind Poly / ML und SML / NJ nahezu gleichwertig. Ich finde die Fehlermeldungen von SML / NJ etwas besser; Sie neigen dazu, spezifischere Quellorte zu haben. Natürlich werden die Quellorte von SML / NJ, wenn sie als REPL verwendet werden, in stdIn
angegeben, für die die Zeilennummern nicht besonders hilfreich sind.
Wenn Ihre Schüler nur die REPL verwenden oder Programme mit einer einzigen Datei kompilieren, würde ich mir vorstellen, dass entweder Poly / ML oder SML / NJ Ihren Zwecken dienen würden. Beide bieten die Funktion SML use
. Multi-Datei-Programme werden wahrscheinlich am besten von SML / NJ's Compilation Manager oder MLtons ML Basis System bedient; Poly / ML bietet noch ein weiteres Kompilierungssystem ( PolyML.make
), aber ich habe es nie benutzt.
Welche Schwierigkeiten haben Sie mit der Zusammenstellung von Poly / ML? Seit Version 5.0 hat Poly / ML eine einfache ./configure ; make ; make install
-Build unterstützt. Die Verwendung von Poly / ML 5.X zum Kompilieren einer eigenständigen ausführbaren Datei erfordert die Verwendung von PolyML.export
und das Aufrufen eines C-Compilers, ist jedoch in den Versionshinweisen zur Version 5.0 ziemlich genau beschrieben.
Ich weiß, dass dies eine sehr späte Antwort auf die Frage ist, aber es gibt ein Moskauer ML-Projekt auf github mit einer aktualisierten Basis-Bibliothek. Es ist Ссылка (mit einem Update im November 2012!)
Ich habe auch Code, der einen Großteil der neuen Basis-Bibliothek für Moskau ML implementiert, so dass ich sowohl ihn als auch Poly / ML verwenden kann, um HOL4 zu implementieren. Der Code dafür ist alles innerhalb Ссылка und könnte ausgegraben werden, wenn du es willst.
Es gibt einen LLVM-Port von Moscow ML. Ich weiß nicht, ob es für alle Zwecke noch verwendbar ist, aber in Bezug auf Geschwindigkeit sollte es besser sein als das alte Camlrunm.
Vielleicht lohnt es sich, das Feature zu portieren, von dem Sie glauben, dass es sich von dem Code in der Dokumentation unterscheidet. Ich bin mir sicher, dass die Moskauer ML Betreuer es schätzen werden.
Ich fand keinen Unterschied in der Dokumentation, die mit Moscow ML und der tatsächlichen Implementierung geliefert wird, aber ich habe in Standard ML keine großen Projekte gemacht. Ich denke, es wäre hilfreich, wenn Sie ein Beispiel geben könnten, in dem sich die Moskauer ML-Dokumentation von der Implementierung unterscheidet. Das würde mich auch interessieren.
Tags und Links compiler-construction functional-programming interpreter sml