Was ist domänenspezifische Sprache?Wer ist es?In welcher Art und Weise?

StackOverflow https://stackoverflow.com/questions/809574

  •  03-07-2019
  •  | 
  •  

Frage

Ich glaube, ich bin auf der Suche nach irgendeiner Art von intro und sehen, ob jemand es benutzt haben.Gibt es irgendwelche besonderen Vorteile der Verwendung es?

Wikipedia:

domain-specific language (DSL) ist eine Programmiersprache, oder Beschreibungssprache, einem spezifischen problem-Domäne, ein besonderes problem der Repräsentation in der Technik und/oder einer bestimmten Lösung Technik.

Kann jemand geben, keine spezifischen Beispiele, wie Sie umgesetzt haben oder wie nützlich es sein kann, in einem bestimmten Szenario?

War es hilfreich?

Lösung

Eine domänenspezifische Sprache ist eine Sprache, die mit einer bestimmten Domäne oder eine Reihe von Bedenken zu befassen geschrieben. Es gibt eine Menge von ihnen um, wie Make, Ameise und Rechen zur Beschreibung Software baut, oder lexx und yacc für Sprache Aufbau. In den letzten Jahren haben sie populär geworden, da einige Dinge kombiniert haben, um sie leichter zu bauen zu machen. Große unter den Dingen, hat die zunehmende Beliebtheit von Ruby gewesen, die mehrere Funktionen, die es leicht machen, neue DSLs zu bauen.

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

Andere Tipps

Sie können in einer allgemeineren Programmiersprache geschrieben für Funktionen wie zu komplexen Argumenten von DSLs denken. Die eigentliche Programmiersprache des DSL Code analysiert und macht etwas mit ihm, in der Regel konzentriert sich der DSL-Code nur auf dem was Sie tun mögen, und das größere System findet heraus, die wie .

Beispiele für DSL sind alle Abfragesprachen (SQL, XPath, ...), alle Template-Sprachen (Django, Smarty, ...), Shell-Skripte, insbesondere einschließlich Sachen wie Köper, ein Befehl gefahrene Web-Browser (meist verwendet für die automatisierten Test), Datenspeicherung und Austausch Sprachen (XML, YAML, ...), und Dokumentsprachen wie LaTeX, HTML oder CSS.

Einige Sprachen mit sehr flexible Syntax wie TCL und Lisp bauen ihre DSL direkt in die Sprache ..., wenn möglich. Die Mehrheit der Sprachen Strings, in der Regel aus externen Dateien geladen.

Gibt es besondere Vorteile mit ihnen? sie für ihre beabsichtigten Zwecke zu verwenden ist sehr vorteilhaft, dem Punkt, den Sie an sie wenden werden, ohne zu wissen, wie Sie wurden mit (nehme ich an) SQL- oder HTML, ohne zu denken, sie als DSLs.

Ich werde es wagen, zu sagen, es gibt genug DSLs gibt für jede Art von Anwendung, die Sie benötigen; Sie mit ziemlicher Sicherheit nicht brauchen, um zu lernen, wie Sie Ihre eigenen schreiben.

(den Kern der Frage Adressierung)

Ich denke, das erste Mal sah ich DSL irgendwo und seine Definition als „domänenspezifische Sprache“ ich dachte, es auch eine bestimmte, konkrete Sprache , dass ich gerade nicht zu hören ist - aber nein, es ist ein allgemeiner Begriff für Sprachen, die auf einen bestimmten Einsatzbereich zugeschnitten sind.

Ironischerweise, wenn Sie gerade gehört hatte TCL als „Werkzeug-Befehlssprache“, mögt denken, wie DSLs, das wäre es für verschiedene Werkzeuge viele TCLs sein -. aber, nein, seine spezifische Bezeichnung einer bestimmten Skriptsprache

Ich denke, es ist eine Sprache, ist geeignet, Probleme für eine bestimmte Domäne zu lösen. Es könnte einige regelVerarbeitungsSprache oder Service Beschreibungssprache sein.

Ein entgegengesetzt zu einer domänenspezifischen Sprache (DSL) ist eine für allgemeine Sprache .

Eine DSL ist ein guter Weg, um eine Sprache zu entwickeln, von Nicht-Programmierern verwendet werden. Zum Beispiel, wenn Sie einen DSL für die Finanz Menschen in einem Unternehmen haben, dann anstatt Programmierung ihrer Spezifikation können Sie lassen Sie sie einfach das Programm, das sie erreichen wollen schreiben. Dann wird, wenn es zu langsam ist, dann können Sie nehmen, was sie schrieb das funktioniert, wie sie wollen, schreiben Sie es in einer kompilierten Sprache, es zu beschleunigen.

Alles ist ein DSL ...

Assembler: MOV R1 R2
Compiler: Zuweisungsanweisungen - A = A + 1, Conditionals - IF (TRUE), ..., Ast - RETURN
HTML: ... beschreiben eine verschachtelte Struktur
TCP / IP: beschreiben zu / von Adressen
PDF: Text / Bild Platzierung auf Papier
beschreiben Fonts: beschreiben Zeichen

Jede Sprache, die wir ein spezielles Verfahren zu beschreiben ist ein DSL. Leider gibt es einen Mangel an domänenspezifischen Sprachen auch unsere grundlegendsten Prozesse zu beschreiben, so verwenden wir die wenigen Sprachen, die wir alles tun müssen, beschreiben wir tun. „Zip alle HTML-Dateien in meiner Web-Site“ erfordert 300 Linien von 3 oder 4 verschiedenen Sprachen zu vervollständigen.

So erstellen Sie eine DSL die minimale Anzahl von Zeichen bestimmen benötigt einen Prozess zu beschreiben, die Sie sich erinnern können und erfordert keine Dokumentation. Denken Sie daran, dass die Geschwindigkeit und Benutzerfreundlichkeit sind die wichtigsten Design-Kriterien. Parsing so schnell ist, dass jede Syntax Sie in Ordnung verwenden ist, ziehe ich es natürliche Sprache als meine Syntax in den meisten Fällen „Pay Mitarbeiter am ersten Tag des Monats“, aber domänenspezifische ist nur, dass domänenspezifische, die Syntax bestimmen, die am besten paßt das Problem.

würde ich bleiben weg andere Lösungen verwenden, das bequem sein könnte, aber paßt nicht das Problem wie HTML, die verwendet wurde, um Daten (XML) zu definieren. CSV ist sehr nützlich, es die meisten Probleme passt. JSON nicht die einfache Bedienung Teil passen, ist es übertrieben, dass unnötige Komplikationen fügt waren CSV für die meisten Probleme funktioniert. Wir verwenden EXCEL viel für DSL, es funktioniert großartig für die Beschreibung kleine Probleme, unter 65K bis 1 M Reihen, wie ein Baumstruktur oder Menüs, Spalte A ist die Ebene, die anderen Spalten sind Symbole, Farben, Etiketten und so (EXCEL ist ein editierbare CSV).

fand ich, dass HTML nicht wirklich das Problem des Seitenlayouts lösen, so habe ich es loswerden und einen DSL definiert, die fit macht. I 6 definierten Regionen auf der Seite, Header, Body, Footer, Ränder links / rechts und links / rechts vollrandiger. Ich kann dann der Seite Generator sagt eine Titelleiste, Statusleiste, Speisekarten, TABLE, FORMEN, ..., an spezifischen Zellen hinzuzufügen. Jede dieser Zellen könnten dann in beliebiger Tiefe aufgeteilt in Zeilen und Spalten werden. Seitenlayout dauert Sekunden für jeden Stil.

BODY enthält eine Tabelle meiner Mitarbeiter
HEADER enthält eine Titelleiste Beschriftung 'Hallo Welt' mit Login Collins Software

Ein Menü DSL passen nicht in das Seitenlayout DSL, so baute ich eine einzigartige DSL für Menüs.

Ressourcen Meine Hauptmenü
* Definieren: Menü, m, Ebene, Etikett, Icon, Action;
m, 0, Datei;
m, 1, offen, open.gif, Dialog Datei öffnen;

Jedes Problem einzigartig ist, kann der Computer ein beliebiges Format zu verwenden, ist es der Mensch ist, der DSLs sind für den, so machen es verständlich, von den Menschen, etwas, das sie in eingeben können, und machen Sie die Sprache aus echten Worte; denn es ist echte Menschen, Orte und Dinge, die wir beschreiben.

Well! es gibt viele Dinge oben erläutert. Ich werde versuchen, dies als jemand in viel einfachere Art und Weise zu erklären, wie ich verstehen, kommen.

Als allgemeine Zwecke Sprachen werden für große Zwecke verwendet die DSL nur für bestimmte Domain gemacht wird. Wie HTML oder CSS.

Sie können sagen, wenn Sie Anweisungen auf ein Papier geschrieben, die nur einige Person oder Ihre einzige beste Freundin verstehen und niemand sonst konnte. Dann kann es ein DSL sein. Aber wenn Sie schrieb Unterricht in solchen Begriffen, die viele Menschen verstehen könnten und folgen dann nicht DSL ist.

I onces eine Schalttafel für Benutzer erstellt, die über die serielle Schnittstelle eines Computers und Benutzer wollen ein Programm für das Board betrieben werden könnten, die auf dieser Platine und Relaisschalter ausgeführt werden könnte, werden ein- und ausgeschaltet entsprechend gedreht werden. Also schrieb ich einige Anweisungen und sagte dem Benutzer, dass die Platine zu programmieren nach dieser Anleitung. Dies ist ein Beispiel für DSL. Ich habe nicht eine neue Sprache eher dann erfinden ich erstellt Bündel nur von Strings, die Mikro-Controller aus dem EEPROM lesen konnten und könnten entsprechend analysieren und könnten eine bestimmte Aufgabe auszuführen.

Ich habe geschrieben eine kurze blog-post diskutieren, warum ich mag die Verwendung von DSLs:

Ich Wünschte, Wir Verwendeten Domain-Specific Languages (DSLs) Mehr

In es, ich definiere einen DSL-als:

Eine kleine Programmiersprache, die speziell entworfen, um zu kommunizieren, Lösungen für eine bestimmte Domäne der Probleme.

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

Ich mag die Verwendung von DSLs, weil Sie den Fokus auf die Erleichterung der Kommunikation von Lösungen für bestimmte problem-Bereiche, und Sie tun das in einer Weise, dass fördert die Aufnahme von domain-Experten.

Ein einfaches Beispiel für Domain Specific Language (DSL) ist HTML, die für die jeweilige Domain-Web-basierte Anwendungen genannt verwendet wird.

Ich habe gerade vor kurzem DSL gehört, aber ein wirklich hilfreich Beispiel finden. LUNA (ehemalige lunascript)

Es ist eine maßgeschneiderte Programmiersprache / Rahmen von Asana-Team für die eigene Plattform aus.

Wie ich weiter finden, viele Unternehmen ihre eigene Frameworks und Sprachen, um einen richtigen Wettbewerbsvorteil, einige Beispiele zu erstellen sind:

  • SAP mit ABAP
  • People mit People
  • Apple mit Objective-C
  • Facebook hat Dinge wie FBML und FQL

Das ist domänenspezifische, weil man sie fast ausschließlich für die Arbeit auf diesen Plattformen verwenden wird.

Ich hoffe, dass diese Antwort hilft Ihnen auf dem Konzept zu klären.

Ein Beispiel für eine DSL verwendet maschinelles Lernen ist patsy in python:https://patsy.readthedocs.io/en/latest/formulas.html#

die Grundlage 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 seines advanced R Buch beschreibt die Erstellung einer DSL w/R:http://adv-r.had.co.nz/dsl.html

Nachdem die deep-learning-Bereich stabilisiert etwas (oder sogar jetzt) ich würde gerne etwas ähnliches entstehen im inneren Apache MXnet-Projekt.Jedoch, ich habe nicht gesehen, jeder Vorschlag, der auf der Vorschlag der Seite noch obwohl.

Domänenspezifische Sprachen äußern Sie Ihre Domain-Prozesse und Wissen in einer Sprache, die die Konzepte und die Logik von Ihrem speziellen Bereich direkt verwendet.

Die Gemeinschaft wächst auf jeden Fall aber noch nicht in der Ebene des anderen „Mainstream“ -Technologien.

die meiste Zeit sind DSLs gemacht Produktivität in den Unternehmen zu verbessern, so halten sie es privat und nicht ihre Ergebnisse / Erkenntnisse teilen.

Hier ist eine Konferenz, wo der Sprecher einige Beispiele für DSL mit gibt JetBrains MPS , mit der Technologie von Projektionsdensitometriesystem Bearbeitung: https://vimeo.com/197381453

DSL - DomainSpecificLanguage

  

DSL ist eine Computersprache, die auf eine bestimmte Art von Problem gezielt ist, sondern als eine Allzweck-Sprache, die bei jeder Art von Software-Problem ausgerichtet ist.

Dabei gilt: Konfigurationen (TravisCI .yaml), Build-Skripte ( gradle ), Abhängigkeiten der Targets (< a href = "https://guides.cocoapods.org/syntax/podspec.html" rel = "nofollow noreferrer"> pod ), UI-Programmierung ( Anko ) etc.

DSL ist eine deklarative Programmierung - Was zu tun, statt wie tun

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

Interne DSLs sind besondere Möglichkeiten, um eine Host-Sprache für die Verwendung der Host-Sprache das Gefühl einer bestimmten Sprache (z. Lisp, Ruby, Java-Annotationen, Makros).

geben

Lesen Sie mehr hier hier

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