Chociaż sam jestem nowicjuszem w programowaniu śmieciowych programów (i dlatego prawdopodobnie całkowicie tęsknię za łodzią), wydaje się, że bardzo zgadza się z koncepcją DSL .
Ideą DSL jest rozdzielenie dziedziny problemów na prostą gramatykę zorientowaną na język naturalny, którą można wykorzystać do budowy algorytmów rozwiązywania tych problemów.
Dla mnie ten sam pomysł, a przynajmniej jego podstawowa podstawa, jest taki sam lub przynajmniej ściśle związany z programowaniem literackim.
Na przykład w groovy świecie istnieje silna potrzeba regularnego korzystania z DSL i tworzenia nowych DSL w celu rozwiązania typowych problemów. Takie wypychanie pochodzi zarówno z narzędzi w języku (łatwych konstruktorów), jak iz bibliotek podstawowych obsługujących interfejs API oparty na DSL.
Biorąc pod uwagę, że trend, przynajmniej w tej części świata, jest w kierunku programowania literat, powiedziałbym, że jest to dobra metoda, aby dążyć.
Niestety, poziom myślenia potrzebny do stworzenia dobrego dsl często przekracza większość programistów, z tego co widziałem. Wiem, że od czasu do czasu mam problemy z niektórymi pojęciami. Być może ta trudność uniemożliwiła takim technikom szersze zastosowanie.
To klasyczny przypadek korzystania z tego narzędzia to jedno, ale tworzenie go odbywa się na zupełnie innym poziomie.
Aby nieco rozwinąć mój punkt widzenia, nie jest tak, że DSL są takie same jak programowanie literackie, ale raczej sprawiają, że programowanie literackie jest o wiele bardziej możliwe . Szczególnie, gdy są to DSL w języku naturalnym .
W wersji 1.8 Groovy zdolność DSL w języku naturalnym została znacznie ulepszona dzięki dodaniu mocniejszych łańcuchów poleceń.
Na przykład, następujące wiersze kodu programowania , nie tylko pseudo-zdania:
drink tea with sugar and milk
move left by 30.centimeters
sendFrom "Guillaume" to "Jochen"
send from: "Jochen" to "Lidia"
Email.from "Lidia" to "Guillaume" withBody "how are you?"
contact.name "Guillaume" age 33
move left by 30.centimeters
sell 100.shares of MSFT
take 2.pills of chloroquinine in 6.hours
blend red, green of acrylic
artist.paint "wall" with "Red", "Green", and: "Blue" at 3.pm
wait 2.seconds and execute { assert true }
concat arr[0] with arr[1] and arr[2]
developped with: "Groovy" version "1.8-beta-2"
Uwaga: próbka kodu pochodzi z bloga Guillaume Laforge
Podstawową ideą programowania piśmiennego jest to, że język naturalny jest bardziej zrozumiały dla ludzi i to jest ważne. Moim zdaniem, możliwości DSL języka naturalnego Groovy sprawiają, że jest to o wiele bliższa rzeczywistość. Zwłaszcza, gdy te DSL są używane do tworzenia reguł biznesowych dla aplikacji.
Umiejętność „kodowania” krytycznych elementów systemu za pomocą języka naturalnego jest samą istotą umiejętności czytania i pisania. Konieczność przeplatania języka naturalnego z fragmentami kodu jest przeklętą formą umiejętności czytania i pisania. Chociaż przydatne, uważam, że DSL w języku naturalnym, które pozwalają używać języka naturalnego jako samego kodu, stanowią ogromny krok naprzód.
Poszerzenie możliwości programowania na ogół jest kolejnym krokiem tego procesu, ale w dużej mierze narzędzia do tego celu są już dostępne. Tak, nie ma jeszcze „ogólnej” DSL, ale w przypadku mniejszych domen istnieje możliwość.
Aby uzyskać więcej przykładów tego w akcji (w określonej kolejności):