it-swarm.com.de

Was ist eine domänenspezifische Sprache? Jemand, der es benutzt? Und wie?

Ich schätze, ich suche nach einer Art Intro und schaue, ob jemand es benutzt hat. Gibt es besondere Vorteile bei der Verwendung?

Wikipedia:

domänenspezifische Sprache (DSL) ist eine Programmiersprache oder Spezifikationssprache, die einer bestimmten Problemdomäne, einer bestimmten Problemdarstellungstechnik und/oder einer bestimmten Lösungstechnik gewidmet ist.

Kann jemand konkrete Beispiele dafür nennen, wie Sie es implementiert haben oder wie es in einem bestimmten Szenario nützlich sein kann?

97
Srikar Doddi

Eine domänenspezifische Sprache ist eine Sprache, die für eine bestimmte Domäne oder eine Reihe von Bedenken geschrieben wurde. Es gibt viele davon, wie make, ant und rake, um Software-Builds zu beschreiben, oder Lexx und Yacc für die Sprachkonstruktion. In den letzten Jahren sind sie populär geworden, da einige Dinge kombiniert wurden, um das Bauen zu vereinfachen. Unter diesen Dingen war die zunehmende Beliebtheit von Ruby groß, das über mehrere Funktionen verfügt, die das Erstellen neuer DSLs vereinfachen.

Martin Fowler ist ein großer Befürworter der Idee, wie hier .

105
Charlie Martin

Sie können sich DSLs als zu komplexe Argumente für Funktionen vorstellen, die in einer allgemeineren Programmiersprache geschrieben sind. Die reale Programmiersprache analysiert den DSL-Code und macht etwas damit. Normalerweise konzentriert sich der DSL-Code nur auf das was, das Sie tun möchten, und das größere System berechnet das wie =.

Beispiele für DSL sind alle Abfragesprachen (SQL, XPath, ...), alle Vorlagensprachen (Django, Smarty, ...), Shell-Skripte, insbesondere solche wie Twill, ein befehlsgesteuerter Webbrowser (meist für automatisierte Tests verwendet) ), Datenspeicher- und Austauschsprachen (XML, YAML, ...) und Dokumentensprachen wie LaTex, HTML oder CSS.

Einige Sprachen mit sehr flexibler Syntax wie TCL und LISP bauen ihre DSL direkt in die Sprache ein ... wenn möglich. Die meisten Sprachen verwenden Zeichenfolgen, die normalerweise aus externen Dateien geladen werden.

Gibt es besondere Vorteile bei der Verwendung? Ihre Verwendung für die beabsichtigten Zwecke ist sehr vorteilhaft, so dass Sie sich an sie wenden können, ohne es zu wissen, genau wie Sie SQL oder HTML verwendet haben (ich nehme an), ohne sie als DSLs zu betrachten.

Ich wage zu behaupten, dass es genügend DSLs für jede Art von Anwendung gibt, die Sie möglicherweise benötigen. Sie müssen mit ziemlicher Sicherheit nicht lernen, wie man ein eigenes schreibt.

56
rgz

(Den Kern der Frage ansprechen)

Ich denke, das erste Mal, als ich DSL irgendwo und seine Definition als "domänenspezifische Sprache" sah, dachte ich auch, dass es eine war Insbesondere konkrete Sprache , von der ich bisher noch nichts gehört hatte - aber nein, es ist ein allgemeiner Begriff für Sprachen, die auf ein bestimmtes Anwendungsgebiet zugeschnitten sind.

Ironischerweise könnten Sie, wenn Sie gerade von TCL als "Werkzeugbefehlssprache" gehört hätten, denken, dass es wie bei DSLs viele TCLs für verschiedene Werkzeuge geben würde - aber nein, es ist der spezifische Name einer bestimmten Skriptsprache.

12
rndmcnlly

Alles ist ein DSL ...

Assembler: MOV R1 bis R2
Compiler: Zuweisungsanweisungen - A = A + 1, Bedingungen - IF (TRUE) ..., Zweig - RETURN
HTML: ... beschreibt eine verschachtelte Struktur
TCP/IP: Beschreiben von/zu Adressen
PDF: Beschreiben Sie die Platzierung von Text/Bildern auf Papier
Schriften: beschreiben Zeichen

Jede Sprache, mit der wir einen bestimmten Prozess beschreiben, ist eine DSL. Leider fehlt es an domänenspezifischen Sprachen, um auch die grundlegendsten Prozesse zu beschreiben. Daher verwenden wir die wenigen Sprachen, die wir zur Beschreibung unseres gesamten Handelns benötigen. Für "Alle HTML-Dateien auf meiner Website komprimieren" sind 300 Zeilen mit 3 oder 4 verschiedenen Sprachen erforderlich.

Bestimmen Sie zum Erstellen einer DSL die Mindestanzahl von Zeichen, die zum Beschreiben eines Prozesses erforderlich sind, an den Sie sich erinnern können und für den keine Dokumentation erforderlich ist. Denken Sie daran, dass Geschwindigkeit und Benutzerfreundlichkeit die Hauptkriterien für das Design sind. Das Parsen ist so schnell, dass jede Syntax, die Sie verwenden, in Ordnung ist. In den meisten Fällen bevorzuge ich die natürliche Sprache als Syntax "Pay Employees at the first of the month" passt das problem.

Ich würde es vermeiden, andere Lösungen zu verwenden, die möglicherweise praktisch sind, aber nicht zu dem Problem passen, wie beispielsweise HTML, das zum Definieren von Daten (XML) verwendet wurde. CSV ist sehr nützlich, es passt zu den meisten Problemen. JSON passt nicht zum Teil der Benutzerfreundlichkeit, es ist übertrieben, was unnötige Komplikationen mit sich bringt, wenn CSV für die meisten Probleme funktioniert. Wir verwenden Excel häufig für DSL, es eignet sich hervorragend zur Beschreibung kleiner Probleme, unter 65 KB bis 1 MB Zeilen, wie z. B. Baumstrukturen oder Menüs, Spalte A ist die Ebene, andere Spalten sind Symbole, Farben, Beschriftungen usw. (Excel ist eine bearbeitbare CSV).

Ich fand, dass HTML das Problem des Seitenlayouts nicht wirklich löste, also wurde ich es los und definierte ein DSL, das passt. Ich habe 6 Regionen auf der Seite definiert, HEADER, BODY, FOOTER, LEFT/RIGHT MARGINS und LEFT/RIGHT FULL MARGINS. Ich könnte dann den Seitengenerator anweisen, eine TITELLEISTE, STATUSLEISTE, MENÜS, TABELLE, FORMEN, ... zu bestimmten Zellen hinzuzufügen. Jede dieser Zellen kann dann bis zu einer beliebigen Tiefe in Zeilen und Spalten aufgeteilt werden. Das Seitenlayout dauert für jeden Stil Sekunden.

KÖRPER enthält eine Tabelle meiner Mitarbeiter
HEADER enthält eine Titelleistenüberschrift 'Hello World' mit Anmeldung bei Collins Software

Ein Menü-DSL passt nicht zum Seitenlayout-DSL, daher habe ich ein einzigartiges DSL für Menüs erstellt.

Ressource Mein Hauptmenü
* definieren: Menü, m, Ebene, Beschriftung, Symbol, Aktion;
m, 0, file;
m, 1, open, open.gif, Dialog Datei öffnen;

Jedes Problem ist einzigartig, der Computer kann jedes Format verwenden, es ist der Mensch, für den DSLs entwickelt wurden. Machen Sie es also für Menschen verständlich, etwas, das sie eingeben können, und machen Sie die Sprache aus echten Wörtern. denn es sind echte Menschen, Orte und Dinge, die wir beschreiben.

9
Clif

Ich denke, es ist eine Sprache, die geeignet ist, Probleme für eine bestimmte Domäne zu lösen. Dies kann eine Regelverarbeitungssprache oder eine Servicebeschreibungssprache sein.

Ein Gegensatz zu einer domänenspezifischen Sprache (DSL) ist Allzwecksprache.

9
Michael Damatov

Ein DSL ist eine gute Möglichkeit, eine Sprache zu entwickeln, die von Nicht-Programmierern verwendet wird. Wenn Sie zum Beispiel ein DSL für die Finanzmitarbeiter in einem Unternehmen haben, können Sie sie das gewünschte Programm schreiben lassen, anstatt nach ihren Vorgaben zu programmieren. Wenn es dann zu langsam ist, können Sie das, was sie geschrieben haben, so nehmen, wie es funktioniert, und es in einer kompilierten Sprache schreiben, um es zu beschleunigen.

8
James Black

Ich habe einen kurzen Blog-Beitrag geschrieben, in dem ich erläutere, warum ich DSLs gerne benutze:

Ich wünschte, wir hätten domänenspezifische Sprachen (DSLs) verwendet

Darin definiere ich eine DSL als:

Eine kleine Programmiersprache, die speziell entwickelt wurde, um Lösungen für einen bestimmten Bereich von Problemen zu vermitteln.

Wenn Sie in Bezug auf die Verwendung jemals Ant, SQL (Structured Query Language) oder CSS (Cascading Style Sheets) verwendet haben, haben Sie DSL verwendet.

Ich benutze DSLs gern, weil sie sich darauf konzentrieren, die Kommunikation von Lösungen für bestimmte Problembereiche zu erleichtern, und dies auf eine Weise, die die Einbeziehung von Domain-Experten fördert.

4
AdamJonR

Gut! Es gibt viele Dinge, die oben erklärt wurden. Ich werde versuchen, dies auf viel einfachere Weise zu erklären, da jemand wie ich es verstehen wird.

Da Allzwecksprachen für umfangreiche Zwecke verwendet werden, ist DSL nur für bestimmte Domänen vorgesehen. Wie HTML oder CSS.

Sie können sagen, wenn Sie Anweisungen an ein Papier geschrieben haben, die nur eine Person oder Ihr einziger bester Freund verstehen kann und niemand sonst könnte. Dann kann es ein DSL sein. Aber wenn Sie Anweisungen in solchen Begriffen geschrieben haben, die viele Leute verstehen und befolgen können, dann ist dies kein DSL.

Ich habe einmal eine Schalttafel für Benutzer erstellt, die über die serielle Schnittstelle eines Computers bedient werden kann, und der Benutzer möchte ein Programm für diese Karte, das auf dieser Karte ausgeführt werden kann, und Relaisschalter werden entsprechend ein- und ausgeschaltet. Also schrieb ich einige Anweisungen und forderte den Benutzer auf, diese Karte gemäß diesen Anweisungen zu programmieren. Dies ist ein Beispiel für DSL. Ich habe keine neue Sprache erfunden, sondern nur eine Reihe von Zeichenfolgen erstellt, die der Mikrocontroller aus dem EEPROM lesen und entsprechend analysieren und eine bestimmte Aufgabe ausführen konnte.

4
Abdul Rehman

Ein einfaches Beispiel für die domänenspezifische Sprache (Domain Specific Language, DSL) ist HTML, das für die bestimmte Domäne verwendet wird, die als webbasierte Anwendungen bezeichnet wird.

3
Anil Kumar

Ich habe gerade erst DSL gehört, finde aber ein wirklich hilfreiches Beispiel: LUNA (ehemals Javascript).

Es ist eine maßgeschneiderte Programmiersprache/Framework, die vom Asana-Team für ihre eigene Plattform erstellt wurde.

Wie ich weiter finde, stellen viele Unternehmen ihre eigenen Frameworks und Sprachen her, um einen angemessenen Wettbewerbsvorteil zu erzielen. Einige Beispiele sind:

  • SAP mit AbAp
  • PeopleSoft mit PeopleCode
  • Apple mit Objective-C
  • Facebook hat Dinge wie FBML und FQL

Diese sind domänenspezifisch, da Sie sie fast ausschließlich für die Arbeit auf diesen Plattformen verwenden.

Ich hoffe, diese Antwort hilft Ihnen bei der Klärung des Konzepts.

3
Abraham Romero

Ein Beispiel für ein beim maschinellen Lernen verwendetes DSL ist Patsy in Python: https://patsy.readthedocs.io/en/latest/formulas.html#

das basiert auf der Formel DSL von R: https://stat.ethz.ch/R-manual/R-devel/library/stats/html/formula.html

https://cran.r-project.org/web/packages/Formula/vignettes/Formula.pdf

und Hadley hat einen schönen Abschnitt in seinem fortgeschrittenen R-Buch, der beschreibt, wie man ein DSL mit R baut: http://adv-r.had.co.nz/dsl.html

Sobald sich das tiefe Lernfeld etwas stabilisiert hat (oder sogar jetzt noch), würde ich gerne sehen, dass sich in Apache MXnet etwas Ähnliches ergibt. Allerdings habe ich auf der Vorschlagsseite noch keinen Vorschlag dafür gesehen .

2
Lucas Roberts

Domänenspezifische Sprachen drücken Ihre Domänenprozesse und Kenntnisse in einer Sprache aus, die direkt die Konzepte und die Logik Ihres jeweiligen Fachgebiets verwendet.

Die Community wächst definitiv, aber immer noch nicht auf dem Niveau anderer "Mainstream" -Technologien.

In den meisten Fällen werden DSLs zur Steigerung der Produktivität in den Unternehmen entwickelt, sodass sie privat bleiben und ihre Ergebnisse/Erkenntnisse nicht weitergeben.

Hier ist eine Konferenz, in der der Redner einige Beispiele für DSL mit JetBrains MPS und der Technologie der Projektionsbearbeitung gibt: https://vimeo.com/19738145

1
Oscar Rodriguez

DSL - DomainSpecificLanguage

DSL ist eine Computersprache, die auf eine bestimmte Art von Problem abzielt, und keine Allzwecksprache, die auf jede Art von Softwareproblem abzielt.

Wobei: Konfigurationen (TravisCI .yaml), Build-Skripte ( gradle ), eine Version einer Pod-Bibliothek ( Podspec ), UI-Programmierung ( Anko =) etc.

DSL ist eine deklarative Programmierung - Was stattdessen zu tun wie zu tun ist

Externe DSLs haben ihre eigene benutzerdefinierte Syntax und Sie schreiben einen vollständigen Parser, um sie zu verarbeiten (z. B. XML, RegExp, SQL, HTML, CSS, UML).

Interne DSLs sind spezielle Möglichkeiten, mit einer Host-Sprache der Host-Sprache das Gefühl einer bestimmten Sprache zu verleihen (z. B. LISP, Ruby, Java Annotationen, Makros).

Lesen Sie mehr hier , hier

0
yoAlex5