Domeinspecifieke talen (DSL’s) bestaan al sinds ik in de informatica zit, maar het is moeilijk om veel informatie te vinden over hoe je ermee moet werken. DSL’s zijn kleine talen, gericht op een bepaald aspect van een software systeem. Je kunt niet een heel programma bouwen met een DSL, maar je gebruikt vaak meerdere DSL’s in een systeem dat voornamelijk in een general purpose taal is geschreven.
DSL’s zijn er in twee hoofdvormen: extern en intern. Een externe DSL is een taal die onafhankelijk van de algemene host taal wordt geparseerd: goede voorbeelden zijn reguliere expressies en CSS. Externe DSL’s hebben een sterke traditie in de Unix gemeenschap. Interne DSL’s zijn een bepaalde vorm van API in een algemene hosttaal, vaak een fluent interface genoemd. De manier waarop mocking libraries, zoals JMock, verwachtingen voor tests definiëren zijn hier goede voorbeelden van, net als veel van de mechanismen die door Ruby on Rails worden gebruikt. Interne DSL’s hebben ook een lange gebruikstraditie, vooral in de Lisp gemeenschap.
Mensen vinden DSL’s waardevol omdat een goed ontworpen DSL veel gemakkelijker te programmeren kan zijn dan een traditionele library. Dit verbetert de productiviteit van de programmeur, wat altijd waardevol is. In het bijzonder kan het ook de communicatie met domeinexperts verbeteren, wat een belangrijk hulpmiddel is om een van de moeilijkste problemen in software-ontwikkeling aan te pakken. CSS is hier een uitstekend voorbeeld van, de meeste mensen die CSS programmeren beschouwen zichzelf niet als programmeur. Desondanks denk ik in het algemeen niet dat eindgebruikers direct in DSL’s zullen schrijven – het is de communicatieverbetering die belangrijk is.
Hoewel DSL’s al lang bestaan, is het gebrek aan kennis over hoe ermee te programmeren een belangrijke barrière – en dat is precies waarom ik aan dit boek heb gewerkt. Het boek biedt technieken om zowel interne als externe DSL’s te ontwikkelen, waardoor je zowel de informatie krijgt om tussen beide te kiezen als een goed pakket aan informatie om je werk mee te beginnen. Ik benadruk ook het belang van het leggen van een DSL over een library, zodat je meestal beide samen bouwt. Er is ook materiaal over code-generatie, wat af en toe een essentieel onderdeel is van het werken met een DSL.
Net als P van EAA is dit boek een duplex boek, dat zowel een verhaal biedt om over DSL’s te leren als een naslagwerk voor de details, dus laat je niet afschrikken door het hoge aantal pagina’s. Je kunt een goed begrip van het onderwerp krijgen door het verhalende deel (142 pagina’s) te lezen en de rest gebruiken als referentie om in te duiken wanneer je het nodig hebt.
Elektronische kopieën van dit boek zijn beschikbaar. Amazon heeft een versie voor Kindle. InformIT heeft epub en pdf versies. Apple heeft een epub versie in de ibookstore.