Frage

Ich möchte einige praktische Anleitung auf, wenn ich verwenden sollte Domain Specific Language.Ich habe festgestellt Ressourcen über die Vorteile und Nachteile, aber welche Art von Projekt rechtfertigen würde seine Verwendung?

Es scheint, wie es ist eine große Investition in Zeit zum erstellen und pflegen Sie eine DSL -, so was in der Anwendung Platz würde ich bekommen die Produktivität zurück auf meine Zeit investieren?

Edit: Es scheint die gemeinsame Nutzung von DSL ist für Datei-Formate für die dauerhaften Daten-Zustand, was eine DSL für Programm-Logik und Struktur(vielleicht die code-Generierung)?Wann ist das möglich?

Edit #2 Ich bin vor allem zu Fragen, Wann ist die Schaffung einer speziellen DSL lohnt sich.Natürlich sollten wir nutzen vorhandene DSLs so viel wie möglich, um Zeit zu sparen.

War es hilfreich?

Lösung

Es gibt sehr wenige gute Gründe für einen weiteren DSL zu schaffen. Die Welt ist Fett mit Spezial-Sprachen.

Denken Sie zusammen mit diesen Linien.

  1. Lösen Sie das Problem mit einer Universalsprache wie Python, Java, C ++ .. was auch immer.

  2. diese Lösung optimiert die gemeinsamen Merkmale Faktor aus und baut eine wirklich schön, wirklich elegant, wirklich erweiterbare Klassenbibliothek.

  3. optimieren, die Klassenbibliothek zu betonen „Orthogonalität“. Stellen Sie sicher, dass alle Funktionen arbeiten gut zusammen, ohne Probleme.

  4. Wenn Sie eine Vereinfachung der Syntax nur benötigen, einen Scripting-Wrapper um Ihre nette Klassenbibliothek erstellen. Das ist Ihre DSL. Für Python ist dies relativ einfach - es ist bereits eine dynamische Sprache. Für Java gibt es Dinge, die Sie nutzen können. Für C ++ kann es ein wenig Arbeit sein, diese flexiblen Skripting-Umgebung zu bauen.

  5. Wenn Sie noch weitere Optimierung benötigen, sollten Sie einen Compiler für Ihren DSL-Schreiben.

Andere Tipps

ACM Computing Surveys Artikel Wann und Wie die Entwicklung Domain-Spezifischer Sprachen bietet Beratung über eben dieses Thema, ebenso wie Martin Fowler ' s 2010 book Domain-Spezifische Sprachen.

Zum einen würde ich verwenden ein DSL, wenn das Problem Domain gegen Ihre Entwicklung eine weit ist bekannt, Domäne und einige Business-Experten dieser Domain haben schon ging durch große Längen, so ein DSL zu bauen, so dass Sie nicht durch die Längen zu gehen, würde sich um alle Probleme zu lösen, die sie bereits herausgefunden haben.

Wenn Sie denken an Erstellen ein DSL, halte ich würde tun also, wenn Ihr Unternehmen in einem ganz bestimmten Bereich durchgeführt wird, und Sie verbringen die meisten Ihrer Zeit in einem bestimmten Problembereich konzentriert. Wenn Sie springen um Anwendungen für mehrere Problembereiche zu tun, dann würde ich nicht raten, dass Ansatz.

Zum Beispiel, wenn Ihr Unternehmen in der Gebäudesteuer Anwendungen soley ist, könnte es eine gute Idee, ein Steuersystem DSL zu bauen. Dies würde es ermöglichen Ihre Sprache nicht nur von Ihnen in Ihren verschiedenen Steuer Anwendungen nutzbar zu sein, aber es wäre auch von anderen Unternehmen in Ihrer Branche marketeable (nutzbar) sein, die ähnliche Dinge tun wollen, die Sie erreichen.

Natürlich müssen Sie die Kosten / Nutzen Gewicht einen DSL vs einem Rahmen auf eine bereits vorhandene Sprache aufzubauen.

Eine Situation, die den Sinn kommt, wenn die Anforderungen einen sehr hohen oder unwahrscheinlich Grad der Anpassung / Konfiguration erfordert . Also würde man stattdessen eine Art von Scripting-Modell gegen einen DSL liefern.

Nimmt ein Automontage „Arm“ beispielsweise ein Konfigurationsmodell bietet verschiedene Werkskonfigurationen zu unterstützen, wäre unmöglich. (Erkennt dies nicht erkennen, dass, wenn dies geschieht dies tun ... etc.)

Aber für jeden Kunden eine neue Anwendung mit spezialisierter Logik Kompilieren ist wahrscheinlich kein guter Weg zu gehen. Also in diesem Fall erstellen Sie einen kleinen Rahmen, würde eine Art von DSL wird, und dann für jeden Roboterarm Sie verkauft, schreiben Sie eine kleine Anwendung in Ihrem DSL und speichern Sie sie zusammen mit der Kernsoftware, die kompiliert würde und läuft Ihr DSL Skripte statt. Oder noch besser, Werkzeuge, um die DSL zu programmieren sind, zusammen mit dem Roboterarm enthalten, damit Ihr Kunde kann „Programm“ der Arm sich in der DSL Sie erstellt haben.

Eine reale Welt Beispiele, die in den Sinn kommt, ist Yahoo Pipes oder die robots.txt-Richtlinie für die automatische Web-Crawler zum Beispiel (Sie es als ein DSL denken konnte). Sie dürfen nicht eine ausgewachsene DSL sein, aber sie zeigen, wo DSL nützlich sein könnten.

Nun, jemand hat es zu sagen, so geht hier:

Lisp wird von einigen als domänenspezifische Sprache für jeder Domäne betrachtet. Ein gut unterstützt und sehr dehnbar DSL dazu.

In einigen Fällen könnte ein DSL von Lisp (oder eine ähnliche Sprache wie Haskell) fashioning tatsächlich eine Menge Energie mit minimalem Aufwand und damit durchaus lohnenswert wäre. DSLs müssen nicht immer große Wartungsaufwand sein.

Das offensichtlichste ist, dass Sie auf jeden Fall sie verwenden sollten, wenn schon die Sprache existiert und gut unterstützt wird. Die wichtigsten Beispiele hierfür sind UIL für Motif-basierte GUI-Entwicklung und machen für die Software-Builds.

Wenn Sie Ihre eigenen machen, würde ich sagen, für Domains eine große Menge an Aufwand zu schauen richtig in nur Angabe Dingen ist, und wo der Compiler kann nicht wirklich die meisten Fehler finden, aber ein domänenspezifischer Compiler könnte . GUIs sind ein gutes Beispiel, wie die meiste Arbeit bei der Einrichtung des Layouts, und es sind in der Regel viele Möglichkeiten syntaktisch gültige C ++, Anrufe zu tätigen, die überhaupt keinen Sinn zu Ihrem zugrunde liegenden GUI-System machen (Beispiel: versuchen, einen ganzen Dialog einzubetten Widget in einer Taste).

Ich finde UIL insbesondere einen großen Gewinn für die GUI-Entwicklung, da ein UIL Compiler-Fehler in einer GUI-Spezifikation finden kann, wie schön normaler übersetzbar Code zu einem C ++ compilter anschauen. Die Tatsache, dass es gut unterstützt bedeutet, dass der Code in dem Hafen zwischen Plattformen einfach und sogar GUI-Builder.

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