Ich würde gerne wissen, gute Strategien für die Bereitstellung einer domänenspezifischen Sprache, die in mindestens 2 Sprachen (Java, C#) und wahrscheinlich mehr (Python und möglicherweise Javascript) ausgeführt werden muss.eine portable domänenspezifische Sprache schreiben
Einige Hintergrund. Wir haben eine domänenspezifische Sprache entwickelt und implementiert, die derzeit in C# geschrieben ist. Es wird durch eine Reihe von Methodenaufrufen bereitgestellt, deren Argumente entweder gemeinsame Sprachgrundelemente (String, Double usw.), Sammlungen (IEnumerable, HashSet, ...) oder Objekte in einer domänenspezifischen Bibliothek (CMLMolecule, Point3, RealSquareMatrix) sind. Die Bibliothek ist gut getestet und die Objekte müssen einem stabil implementierten XML-Schema entsprechen, so dass Änderungen evolutionär und verwaltet werden (zumindest ist das die Hoffnung).
Wir hoffen, dass die Sprache von einer breiten und teilweise computerkundigen Community genutzt wird, die es gewohnt ist, ihre eigenen Lösungen ohne zentrale Kontrolle zu hacken. Idealerweise wird das DSL einen Grad an Kapselung erzeugen und die wesentliche Funktionalität erzeugen, die sie benötigen. Die Bibliotheken werden die detaillierten Algorithmen verwalten, die vielfältig und doch ziemlich gut bekannt sind. Mit den Anforderungen des DSL in Domain-specific languages vs. library of functions ist viel gemeinsam.
Ich würde gerne Ideen für die beste Architektur (klar, sobald es im Einsatz ist, können wir nicht einfach zurückverfolgen). Die Auswahlmöglichkeiten umfassen mindestens:
- Erstellung eines IDL (z. B. durch CORBA). Das W3C hat dies für das XML-DOM getan - ich hasste es - und es scheint übertrieben zu sein, manuelle Erstellung ähnlicher Signaturen für jede Plattform und das beste Bemühen, sie synchron zu halten,
- .
- Erstellung einer parsable Sprache (z. B. CSS).
- deklarative Programmierung in XML (vgl. XSLT). Dies ist meine bevorzugte Lösung, da sie gesucht, manipuliert usw. werden kann.
Leistung ist nicht wichtig. Klarheit des Zwecks ist.
BEARBEITEN Es wurde diskutiert, ob bei Anwendungsanrufen ein DSL eingerichtet wird. Ich habe Martin Fowlers Einführung in DSLs (http://martinfowler.com/dslwip/Intro.html) entdeckt, wo er argumentiert, dass einfache Methodenanrufe (oder verkettete Anrufe) als DSL bezeichnet werden können. So eine Serie wie:
point0 = line0.intersectWith(plane);
point1 = line1.intersectWith(plane);
midpoint = point0.midpoint(point1);
eine DSL in Betracht gezogen werden könnte
Ein großer negativ in jede Sprache in XML ausgedrückt. Sie möchten, dass ein Entwickler direkt mit dem XML arbeitet oder das Speicher-/Laufzeitformat? Der Typ, der ANT erfunden hat, sagte, XML sei die falsche Wahl und er würde sich anders entscheiden, wenn er etwas ändern könnte. – SteveD
@stevendick. Danke, ich höre was du sagst. Ich bin persönlich ein XML-Süchtiger, aber ich versuche, offen zu bleiben. –
Werfen Sie einen Blick auf das, was der ursprüngliche Autor von ANT zu sagen hat: http://web.archive.org/web/20040602210721/x180.net/Articles/Java/AntAndXML.html Verfolgen Sie nicht blind die XML- Goldenes Hammer-Paradigma. Wenn Sie eine DSL-Datei erstellen, die von tatsächlichen Personen gelesen und geschrieben wird, sollten Sie einen der vielen schönen Lexer/Parser-Tools anstelle von XML verwenden. Es gibt heutzutage viele schöne Werkzeuge (wie ANTLR), die das praktisch machen. Das Schreiben von Lexer/Parsern ist nicht mehr so schmerzhaft wie einst, als lex/yacc Stand der Technik war. –