Frage

Ich möchte einige metaprogramming in einer statisch typisierten Sprache zu tun, in denen beide meine Programme und meine Meta-Programme eingegeben werden. Ich meine, das in einem starken Sinne. Wenn mein Programm-Generator kompiliert, ich das Typsystem will stark genug sein, dass nur typ richtige Programme erzeugt werden können

Soweit ich weiß, nur metaocaml kann dies tun. (Nein, weder Template Haskell noch C ++ Vorlagen passen die Rechnung - siehe diese Papier ). Frage: Was andere Sprachen / Systeme erlauben diese

EDIT: Soweit ich das beurteilen kann, ist metaocaml tot. Oleg versucht, es wieder zu beleben , aber das ist immer noch stecken mehrere Versionen hinter OCaml selbst. Will man mit experimentellen Sprachen gehen (also noch mehr als metaocaml, scheint es, dass Ur und ganz möglicherweise Idris passen die Rechnung. Jede andere neue Einträge in das Feld?

War es hilfreich?

Lösung

F # kann dies auch durch -Code Zitate .

Andere Tipps

Um das zu tun, müssen Sie sicherstellen, dass das Typsystem des zugrunde liegenden languge direkt geehrt / kontrolliert sich durch die Metaprogramm. Als eine praktische Sache, dies zwingt fast das metaprogramming in der zugrunde liegenden Sprache zu sein ... so dass ich denke, ich bin nicht überrascht, dass Sie in der Lage könnten dies in metaocaml zu tun.

Die meisten von uns nicht bekommen, Werkzeuge Metaprogrammierung in die darunter liegende Sprache eingebaut (C ++ ist eher eine Ausnahme, und ich lehne es und Reflexion basierte Systeme als zu schwach beliebige Transformationen durchzuführen).

Ein System, das durchführen kann, beliebige Transformationen (oder Metaprogramme von Sätzen von denen zusammengesetzt) ??auf Code ist die DMS Software Reengineering Toolkit . DMS hat Frontends für viele echte langauges baut Strukturen Compiler-Daten, wenn das Parsen (einschließlich ASTs). DMS bietet Source-zu-Source-Programm Transformationen Transformationen , die darstellen, wie AST-Neufassungen Verwendung die Oberflächen Syntax der Zielsprache. Es erfüllt Ihre Anforderung zu einem gewissen Grad: Wenn Ihre Transformationsregeln syntaktisch korrekt sind (und sie durch DMS geprüft werden), dann wird das transformierte Programm syntaktisch korrekt sein. Es ist nicht Ihre Art-Korrektheit Anforderung erreichen, da die Typprüfung Mechanismen außerhalb der Zielsprache umgesetzt werden. Im Prinzip könnte man eine typsichere Checker Programmtransformationen zu erweitern; In der Praxis haben wir festgestellt, dass wir Transformationen zuverlässig genug codieren können.

Und selbst wenn Sie typsichere Transformationen haben, haben Sie nicht eine Garantie von semantischen Sicherheit in Bezug auf Ihr ursprüngliches Programm. Also, werden Sie noch die Metaprogramme zu debuggen haben.

Compile-Zeit metaprogramming in Scala.

Our flavor of macros is reminiscent of Lisp macros, adapted to incorporate type safety and rich syntax. Unlike infamous C/C++ preprocessor macros, Scala macros: 1) are written in full-fledged Scala, 2) work with expression trees, not with raw strings, 3) cannot change syntax of Scala.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top