Co to jest język specyficzny dla domeny? Ktoś go używa? I w jaki sposób?

Chyba szukam jakiegoś intro i zobaczę czy ktoś z niego korzystał. Czy są jakieś szczególne zalety korzystania z niego?

Wikipedia:

DSL (ang. Domain-specific language) - Język programowania dedykowany konkretnej domenie problemu, określonej technice reprezentacji problemu i/lub określonej technice rozwiązania.

Czy ktos moze podac jakies konkretne przyklady jak to zaimplementowales lub jak mozna być użytecznym w danym scenariuszu?

 72
dsl
Author: famousgarkin, 2009-05-01

11 answers

Język specyficzny dla domeny jest językiem, który jest napisany, aby poradzić sobie z konkretną domeną lub zestawem problemów. Jest ich wiele, jak make, ant i rake do opisywania kompilacji oprogramowania, czy lexx i yacc do budowy języków. W ostatnich latach stały się popularne, ponieważ niektóre rzeczy połączyły się, aby ułatwić ich budowę. Dużą popularnością cieszy się Ruby, który posiada kilka funkcji ułatwiających tworzenie nowych DSL.

Martin Fowler jest wielkim zwolennikiem tego pomysłu, ponieważ TUTAJ .

 77
Author: Charlie Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-06 11:45:32

DSLs można traktować jako zbyt złożone argumenty funkcji napisanych w bardziej ogólnym języku programowania. Prawdziwy język programowania parsuje kod DSL i robi z nim coś, zazwyczaj kod DSL skupia się tylko na co {[2] } Chcesz zrobić, a większy system oblicza Jak .

Przykłady DSL obejmują wszystkie języki zapytań (SQL, XPath, ...), wszystkie języki szablonów (Django, Smarty, ...), skrypty powłoki, zwłaszcza takie jak twill, przeglądarka internetowa sterowana poleceniami (najczęściej używana do automatycznego testowania), przechowywanie danych i języki wymiany (XML, YAML, ...), oraz języków dokumentów takich jak LaTex, HTML czy CSS.

Niektóre języki o bardzo elastycznej składni, takie jak Tcl i Lisp, budują DSL bezpośrednio w języku... jeśli to możliwe. Większość języków używa ciągów znaków, Zwykle ładowanych z zewnętrznych plików.

Czy są jakieś szczególne zalety korzystania z nich? Korzystanie z nich zgodnie z ich przeznaczeniem jest bardzo korzystne dla punkt, który zwrócisz do nich nie wiedząc, tak jak używasz (zakładam) SQL lub HTML bez myślenia o nich jako DSLs.

Ośmielę się powiedzieć, że jest wystarczająco dużo DSL tam dla każdego rodzaju aplikacji może być potrzebne; prawie na pewno nie trzeba nauczyć się, jak napisać własną.

 42
Author: rgz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-08 17:33:55

(odpowiedź na sedno pytania)

Myślę, że po raz pierwszy zobaczyłem gdzieś DSL i jego definicję jako "język specyficzny dla domeny" myślałem również, że jest to konkretny, konkretny język, o którym po prostu nie słyszałem -- ale, nie, to ogólne określenie języków, które są dostosowane do określonego obszaru zastosowań.

Jak na ironię, gdybyś usłyszał o TCL jako "narzędziowym języku poleceń", mógłbyś pomyśleć, podobnie jak DSLs, że byłoby wiele TCLs dla różnych narzędzi -- ale nie, to specyficzna nazwa konkretnego języka skryptowego.

 9
Author: rndmcnlly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-30 23:48:30

Myślę, że jest to język odpowiedni do rozwiązywania problemów dla konkretnej domeny. Może to być jakiś język przetwarzania reguł lub język opisu usługi.

Przeciwieństwem języka DSL (domain specific language) jest język ogólnego przeznaczenia .

 8
Author: Michael Damatov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-30 23:34:05

DSL jest dobrym sposobem na stworzenie języka, który będzie używany przez nie-programistów. Na przykład, jeśli masz DSL dla ludzi finansów w firmie, to zamiast programować zgodnie z ich specyfikacją, możesz po prostu pozwolić im napisać program, który chcą zrobić. Następnie, jeśli jest zbyt wolny, możesz wziąć to, co napisali, że działa tak, jak chcą, napisać to w skompilowanym języku, aby przyspieszyć.

 7
Author: James Black,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-30 23:38:10

Wszystko jest DSL...

Asembler: MOV R1 do R2
Kompilatory: Assignment Statements -- A = A + 1, Conditionals -- IF (TRUE)..., Branch -- RETURN
HTML: ... opis zagnieżdżonej struktury
TCP / IP: opisuj do / z adresów
PDF: opisz umieszczenie tekstu / obrazu na papierze
Czcionki: opisz znaki

Każdy język, którego używamy do opisania określonego procesu, to DSL. Niestety brakuje specyficznych dla domeny języków do opisania nawet naszych najbardziej podstawowe procesy, więc używamy kilku języków, które musimy opisać wszystko, co robimy. "Zip all html files in my web site" wymaga 300 wierszy w 3 lub 4 różnych językach.

Aby zbudować DSL określ minimalną liczbę znaków potrzebnych do opisania procesu, który możesz zapamiętać i nie wymaga dokumentacji. Pamiętaj, że szybkość i łatwość obsługi to podstawowe kryteria projektowe. Parsowanie jest tak szybkie, że każda składnia, której używasz, jest w porządku, wolę język naturalny jako mój składnia w większości przypadków "Zapłać pracownikom na początku miesiąca", ale specyfika domeny to tylko to, specyfika domeny, określasz składnię, która najlepiej pasuje do problemu.

Trzymałbym się z dala od innych rozwiązań, które mogą być wygodne, ale nie pasują do problemu, takich jak HTML, który został użyty do zdefiniowania danych (XML). CSV jest bardzo przydatny, pasuje do większości problemów. JSON nie pasuje do części łatwość obsługi, to przesada, że dodaje niepotrzebne komplikacje były CSV działa dla większości problemów. Używamy Excela dużo dla DSL, to działa świetnie do opisywania małych problemów, pod 65K do 1m wierszy, takich jak struktury drzewa lub menu, kolumna a to poziom, inne kolumny to ikony, kolory, etykiety i takie (EXCEL jest edytowalnym CSV).

Odkryłem, że HTML tak naprawdę nie rozwiązuje problemu układu strony, więc pozbyłem się go i zdefiniowałem DSL, który pasuje. Zdefiniowałem 6 regionów na stronie, nagłówku, korpusie, stopce, lewym / prawym marginesie I lewym / prawym pełnym marginesie. Mógłbym wtedy powiedzieć stronie generator do dodania paska tytułu, paska stanu, menu, tabeli, formularzy,..., do określonych komórek. Każda z tych komórek może być następnie podzielona na wiersze i kolumny na dowolną głębokość. Układ strony zajmuje kilka sekund dla każdego stylu.

ciało zawiera tabelę moich pracowników
Nagłówek zawiera pasek tytułu podpis "Hello World" z loginem do Collins Software

Menu DSL nie pasuje do układu strony DSL, więc zbudowałem unikalny DSL dla menu.

Zasób Mój Główny Menu
* define: menu, M, Poziom,etykieta, ikona, akcja;
m, 0, file;
m, 1, otwarte, Otwarte.gif, okno dialogowe Otwórz plik;

Każdy problem jest unikalny, komputer może używać dowolnego formatu, to jest człowiek, do którego DSL są przeznaczone, więc uczyń to zrozumiałym dla ludzi, coś, co mogą wpisać, i zrobić język z prawdziwych słów; bo to są prawdziwi ludzie, miejsca i rzeczy, które opisujemy.

 4
Author: Clif,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-29 23:36:36

Napisałem krótki wpis na blogu omawiający dlaczego lubię używać DSLs:

Chciałbym, Abyśmy Używali Języków Specyficznych Dla Domeny (DSLs) Więcej

W nim definiuję DSL jako:

Mały język programowania zaprojektowany specjalnie do komunikowania rozwiązań dla konkretnej dziedziny problemów.

Jeśli kiedykolwiek używałeś Ant, Structured Query Language (SQL) lub kaskadowych arkuszy stylów (CSS), używałeś DSL.

Lubię używać DSLs, ponieważ koncentrują się one na ułatwianiu komunikacji rozwiązań do konkretnych przestrzeni problemowych i robią to w sposób, który promuje włączenie ekspertów w danej dziedzinie.

 2
Author: AdamJonR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-26 22:17:55

Jednym z prostych przykładów języka DSL(Domain Specific Language) jest HTML, który jest używany dla konkretnej domeny zwanej aplikacjami internetowymi.

 2
Author: Anil Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-12 11:49:34

Niedawno słyszałem DSL, ale znaleźć naprawdę pomocny przykład: LUNA (były lunascript).

Jest to Niestandardowy język programowania / framework stworzony przez zespół Asana na własną platformę.

Jak dalej stwierdzam, wiele firm tworzy własne frameworki i języki, aby stworzyć odpowiednią przewagę konkurencyjną, niektóre przykłady to:

  • SAP z AbAp
  • PeopleSoft z PeopleCode
  • jabłko z Objective-C
  • Facebook ma rzeczy jak FBML i FQL

Są specyficzne dla domeny, ponieważ będziesz ich używać prawie wyłącznie do pracy na tych platformach.

Mam nadzieję, że ta odpowiedź pomoże ci wyjaśnić pojęcie.

 2
Author: Abraham Romero,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-18 18:44:24

Cóż! jest wiele rzeczy wyjaśnione powyżej. Postaram się to wyjaśnić w znacznie prostszy sposób, jak ktoś taki jak ja przyjdzie zrozumieć.

Ponieważ języki ogólnego przeznaczenia są używane do rozległych celów, DSL jest tworzony tylko dla określonej domeny. Jak HTML lub CSS.

Możesz powiedzieć, jeśli napisałeś instrukcje do gazety, które tylko jedna osoba lub twój jedyny najlepszy przyjaciel może zrozumieć, a nikt inny nie mógł. To może być DSL. Ale jeśli napisałeś instrukcję w takich warunkach, które wiele ludzie mogą zrozumieć i mogą śledzić to nie jest DSL.

I onces stworzył płytę przełącznika dla użytkownika, która może być obsługiwana przez port szeregowy komputera i użytkownik chce program dla tej płyty, który może być uruchomiony na tej płycie i przełączniki przekaźnikowe będą odpowiednio włączane i wyłączane. Więc napisałem kilka instrukcji i powiedziałem użytkownikowi, aby zaprogramował tę płytę zgodnie z tymi instrukcjami. Jest to przykład DSL. Nie wymyśliłem nowego języka, a po prostu stworzyłem kilka ciągów, które mikro kontroler mógł odczytać z EEPROM i mógł odpowiednio przetworzyć i mógł wykonać określone zadanie.

 2
Author: Abdul Rehman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-06 18:16:22

Języki specyficzne dla domeny wyrażają Twoje procesy i wiedzę w języku, który bezpośrednio wykorzystuje pojęcia i logikę z danej dziedziny.

Społeczność zdecydowanie rośnie, ale nadal nie na poziomie innych "mainstreamowych" technologii.

Przez większość czasu DSL są tworzone w celu poprawy wydajności wewnątrz firm, więc zachowują je prywatnie i nie dzielą się swoimi wynikami/spostrzeżeniami.

Oto konferencja, na której prelegent podaje kilka przykładów DSL za pomocą JetBrains MPS , z technologią edycji projekcyjnej: https://vimeo.com/197381453

 1
Author: Oscar Rodriguez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-13 13:55:26