Wir haben die Anforderung, komplexe Strings mit fester Länge und variabler Länge zu erstellen. Diese Zeichenfolgen können ein Kundenprofil, einen Auftrag usw. darstellen. Welche JVM-basierte Programmiersprache schlägt Ihnen vor?
Idee ist, dass ein Endbenutzer die Zeichenfolgen unter Verwendung dieser DSL erstellt. Also suche ich nach Validierung, Codevervollständigung etc.
Verwenden Sie ein Lisp , das auf der JVM ausgeführt wird . Einige Möglichkeiten, die Sie haben:
Es gibt ein gutes kostenloses Buch , in dem erklärt wird, wie Lisp verwendet wird, um Software bottom-up , dh wie man wächst Lisp in eine Sprache, die ideal ist, um das Problem zu lösen.
Sprachen in der Forth -Familie eignen sich auch hervorragend zum Definieren von DSLs. Es gibt einige, die auf der JVM laufen:
Es gibt zwei Arten von DSL; extern und eingebettet.
Eine externe DSL ist vollständig von Ihrer Host-Sprache getrennt, d. h. Sie schreiben sie außerhalb der Sprache, aber sie wird normalerweise verwendet, um Code in der Host-Sprache zu erzeugen. Für diesen Ansatz sind XText mit XPand wahrscheinlich die besten Werkzeuge, da eine einfache Grammatikdatei einen vollständigen Eclipse-basierten Editor für die neue DSL generiert und Sie Code-Vorlagen in XPand verwenden können, um tatsächlichen Java-Code zu generieren. XTend und XPand sind in Java geschrieben, aber das ist nebensächlich, da sie in alles geschrieben werden können, solange Sie am Ende des Prozesses mit Java-Code enden. Der Nachteil bei diesem Ansatz ist, dass für jedes vernünftig komplexe Problem die Sprache ziemlich komplex wird und viel Arbeit in der Grammatik und noch mehr in den Codegenerierungsschablonen benötigt wird. Sie können keine Funktionen für die Host-Sprache wie Ausdrucksevaluierung verwenden, daher müssen Sie bei Bedarf alles in Ihrem DSL neu aufbauen. XText wird in Kürze XBase enthalten, eine Teilsprache, die Ausdrücke enthalten wird, die hier helfen.
Der andere Ansatz ist eine eingebettete DSL, bei der High-Level-Domänenfunktionen in der Hostsprache entweder mit Konstrukten höherer Ordnung (wie HOFs und Monaden) typischerweise in funktionalen Sprachen oder durch Metaprogrammierungsfunktionen wie Makros (z. B. Lisp) ausgedrückt werden ). Java hat keine von beiden, also ist es eine schlechte Wahl für DSL-Arbeit (oder die meisten anderen Formen der abstrakten Programmierung). Spring Roo bietet eine Metaprogrammierungsfunktion für Java, die die Generierung verwendet. Dies könnte eine Option sein. Sollte dies nicht der Fall sein, ist Scala wahrscheinlich die Java-ähnliche JVM-Sprache, die beliebt ist und über die erforderlichen Funktionen verfügt.
Embedded DSLs sind normalerweise viel einfacher als externe DSLs, weil Sie die volle Unterstützung der Host-Sprache haben, also würde ich Scala empfehlen.
Klingt wie ein Problem für die Apache Velocity Templating Engine. Es ist eine Java-Bibliothek mit einer Templating-Syntax oder DSL, wenn Sie so wollen.
Tags und Links java architecture jvm dsl dsl-tools