Welche Sprache (die auf JVM läuft) eignet sich am besten zum Erstellen einer DSL?

8

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.

    
Aravind R. Yarram 24.01.2011, 04:10
quelle

8 Antworten

5

Mit Xtext ( Ссылка ) Sie erhalten einen netten Editor bei der Angabe Ihres DSLs.

    
Henrik 24.01.2011, 14:39
quelle
8

Groovy

Ссылка

    
hhafez 24.01.2011 04:21
quelle
7

Verwenden Sie ein Lisp , das auf der JVM ausgeführt wird . Einige Möglichkeiten, die Sie haben:

  1. Clojure
  2. JScheme
  3. SISC
  4. ABCL
  5. Bigloo (läuft nicht auf der JVM, hat aber gute Java-Interoperabilität).

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:

  1. Niue
  2. Misty Beach Forth
Vijay Mathew 24.01.2011 04:59
quelle
6

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.

    
Andrew 02.02.2011 10:46
quelle
4

Scala den ganzen Weg! Scala eignet sich besonders für interne DSL (bitte dies ).

    
01es 24.01.2011 05:22
quelle
2

Ich würde Groovy dafür empfehlen.

    
Adeel Ansari 24.01.2011 04:21
quelle
0

Ich werde Jruby vorschlagen. Ich habe ein paar gemacht, und es war immer ziemlich einfach zu verstehen, was ich will.

Ссылка

    
xaxxon 24.01.2011 04:52
quelle
-2

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.

    
Konstantin Komissarchik 24.01.2011 04:18
quelle

Tags und Links