Co programiści powinni wiedzieć o językach specyficznych dla danej domeny

Język specyficzny dla danej domeny (DSL) to język przeznaczony do użycia w kontekście konkretnej domeny. Domena może być kontekstem biznesowym (np. bankowość, ubezpieczenia itp.) lub kontekstem aplikacji (np. aplikacja internetowa, baza danych itp.). W przeciwieństwie do języka ogólnego przeznaczenia (GPL) może być używany do szerokiego zakresu problemów biznesowych i aplikacji.

Język DSL nie próbuje zadowolić wszystkich. Zamiast tego jest tworzony dla ograniczonej sfery zastosowania i użycia, ale jest wystarczająco potężny, aby reprezentować i rozwiązywać problemy i rozwiązania w tej sferze. Dobrym przykładem DSL jest HTML. Jest to język dla domeny aplikacji internetowych. Nie może być użyty do, powiedzmy, obliczania liczb, ale jest jasne, jak szeroko stosowany jest HTML w sieci.

Twórca GPL nie wie, gdzie język może być użyty ani jakie problemy użytkownik zamierza za jego pomocą rozwiązać. Tak więc, GPL jest tworzona z konstrukcjami generycznymi, które potencjalnie mogą być użyte do każdego problemu, rozwiązania, biznesu lub potrzeby. Java jest GPL, ponieważ jest używana na komputerach stacjonarnych i urządzeniach przenośnych, osadzona w sieci w bankowości, finansach, ubezpieczeniach, produkcji itp. i wielu innych.

Klasyfikacja DSL

W świecie DSL istnieją dwa rodzaje języków:

  • Język specyficzny dla domeny (DSL): Język, w którym DSL jest pisany lub prezentowany
  • Język hosta: Język, w którym DSL jest wykonywany lub przetwarzany

Język DSL napisany w odrębnym języku i przetwarzany przez inny język hosta jest nazywany zewnętrznym DSL.

Jest to DSL w języku SQL, który może być przetwarzany w języku hosta:

SELECT account
FROM accounts
WHERE account = '123' AND branch = 'abc' AND amount >= 1000

W tym celu można napisać DSL w języku angielskim z określonym słownictwem i formą, który może być przetwarzany w innym języku hosta za pomocą generatora parsera, takiego jak ANTLR:

if smokes then increase premium by 10%

Jeśli DSL i język hosta są takie same, wtedy typ DSL jest wewnętrzny, gdzie DSL jest napisany w semantyce języka i przetwarzany przez niego. Są one również określane jako DSL wbudowane. Oto dwa przykłady.

  • DSL Bash, który może być wykonany w silniku Bash:
    if today_is_christmas; then apply_christmas_discount; fi 

    To jest poprawny Bash, który jest napisany w języku angielskim.

  • SDSL napisany na GPL jak Java:
    orderValue = orderValue
    .applyFestivalDiscount()
    .applyCustomerLoyalityDiscount()
    .applyCustomerAgeDiscount();

    To używa płynnego stylu i jest czytelne jak angielski.

Tak, granice między DSL i GPL czasami się zacierają.

Przykłady DSL

Niektóre języki używane do DSL obejmują:

  • Web: HTML
  • Shell: sh, Bash, CSH, i podobne dla *nix; MS-DOS, Windows Terminal, PowerShell dla Windows
  • Języki znaczników: XML
  • Modelowanie: UML
  • Zarządzanie danymi: SQL i jego odmiany
  • Reguły biznesowe: Drools
  • Hardware: Verilog, VHD
  • Narzędzia do budowania: Maven, Gradle
  • Obliczenia numeryczne i symulacje: MATLAB (komercyjny), GNU Octave, Scilab
  • Różnego rodzaju parsery i generatory: Lex, YACC, GNU Bison, ANTLR

Dlaczego DSL?

Celem DSL jest uchwycenie lub udokumentowanie wymagań i zachowania jednej domeny. Zastosowanie DSL może być jeszcze węższe dla konkretnych aspektów w ramach tej domeny (np. handel towarami w finansach). DSL zbliżają do siebie zespoły biznesowe i techniczne. Nie oznacza to, że DSL jest przeznaczony wyłącznie do użytku biznesowego. Na przykład, projektanci i programiści mogą używać DSL do reprezentowania lub projektowania aplikacji.

Design DSL może być również używany do generowania kodu źródłowego dla danej dziedziny lub problemu. Jednak generowanie kodu z DSL nie jest uważane za obowiązkowe, ponieważ jego głównym celem jest wiedza o domenie. Jednakże, gdy jest używane, generowanie kodu jest poważną zaletą w inżynierii domen.

Zalety i wady DSL

Po stronie plusów, DSL są potężne dla uchwycenia atrybutów domeny. Ponadto, ponieważ DSL są małe, łatwo się ich nauczyć i używać. Wreszcie, DSL oferuje język dla ekspertów domeny oraz pomiędzy ekspertami domeny a programistami.

Po stronie minusów, DSL jest wąsko stosowany w ramach zamierzonej domeny i celu. Ponadto DSL ma krzywą uczenia się, choć może ona nie być bardzo wysoka. Dodatkowo, choć mogą istnieć zalety używania narzędzi do przechwytywania DSL, nie są one niezbędne, a ich opracowanie lub konfiguracja to dodatkowy wysiłek. Wreszcie, twórcy DSL potrzebują zarówno wiedzy o domenie, jak i wiedzy o rozwoju języka, a pojedyncze osoby rzadko posiadają obie te umiejętności.

Opcje oprogramowania DSL

Oparte na otwartych źródłach opcje oprogramowania DSL obejmują:

  • Xtext: Xtext umożliwia rozwój DSL i jest zintegrowany z Eclipse. Umożliwia generowanie kodu i został wykorzystany przez kilka produktów open source i komercyjnych w celu zapewnienia określonych funkcji. MADS (Multipurpose Agricultural Data System) jest ciekawym pomysłem opartym na Xtext do „modelowania i analizy działalności rolniczej” (jednak wydaje się, że projekt nie jest już aktywny).
  • JetBrains MPS: JetBrains MPS to zintegrowane środowisko programistyczne (IDE) do tworzenia DSL-ów. Nazywa siebie edytorem projekcyjnym, który przechowuje dokument jako jego bazową abstrakcyjną strukturę drzewiastą. (Koncepcja ta jest również wykorzystywana przez programy takie jak Microsoft Word.) JetBrains MPS obsługuje również generowanie kodu do języków Java, C, JavaScript lub XML.

Najlepsze praktyki DSL

Chcesz używać DSL? Oto kilka wskazówek:

  • DSL nie są licencjami GPL. Staraj się adresować ograniczone zakresy problemów w domenie definitywnej.
  • Nie musisz definiować własnego DSL. Byłoby to uciążliwe. Poszukaj istniejącego DSL, który rozwiązuje Twoje potrzeby na stronach takich jak DSLFIN, która zawiera listę DSL dla domeny finansów. Jeśli nie jesteś w stanie znaleźć odpowiedniego DSL, możesz zdefiniować własne.
  • Lepiej, aby DSL było „jak angielski” niż zbyt techniczne.
  • Generowanie kodu z DSL nie jest obowiązkowe, ale oferuje znaczące i produktywne korzyści, gdy jest wykonywane.
  • DSL są nazywane językami, ale w przeciwieństwie do GPL, nie muszą być wykonywalne. Bycie wykonywalnym nie jest intencją DSL.
  • DSL mogą być pisane za pomocą edytorów tekstu. Jednak użycie edytora DSL ułatwia sprawdzanie składni i semantyki.

.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *