DSL

Op Javaworld staat deze maand een artikel dat ik erg interessant vond om te lezen, over DSL, ofwel Domain Specific Language, een taal specifiek voor een domein. Naar mijn bescheiding mening zijn DSL’s de manier om veel ICT projecten beheersbaar en te maken.

Op eerste gezicht lijkt maken van een DSL erg ingewikkeld. Bovendien moet iedereen nieuw in een softwareproject, die taal ook leren. Die nadelen zijn niet alleen gering echter, hetzelfde probleem, van leren van een interne taal bestaat al.
In ieder softwareproject (dat als doel heeft een softwareapplicatie te maken), is sowieso sprake van een interne taal en jargon. Ik heb in projecten gewerkt waar over dslam, COIN, provisioning, zero-balancing, IC/ZB, toetsscores, stansmachines, snijmachines, platen werd gesproken (niet allemaal in hetzelfde project overigens). Iemand van buiten het werk wist waarschijnlijk nauwelijks waar we het over hadden.
Kortom er is een ‘project-taal’ die mensen moesten leren, wilden ze goed kunnen meewerken.

Bij het maken van een DSL, wordt op een herbruikbare, formele manier vastgelegd. De informatie over het domein is niet langer bevat in losse Excel, Word documenten of in het hoofd van enkele individuen. Bovendien, alle programmacode die al geschreven is, in de DSL, is veel begrijpelijker dan in een algemene taal. Omdat de DSL ook een formele, niet ambigue taal is, is migratie veel makkelijker. Migreren van een platform naar een ander platform (Unix naar Windows, Mainframe naar Java b.v.) is kwestie van herschrijven van de DSL-compiler.
Het zelfstandig schrijven van een complete compiler, inclusief taaldefinitie in BNF, parser schrijven, codegeneratie is een behoorlijk arbeidsintenstief. Gelukkig, kan, zoals in een eerder genoemde artikel beschreven is, ook een andere taal gebruikt worden. Met een dynamic taal als Ruby en meer geavanceerde static-typing taal als Scala is het ook mogelijk een DSL te schrijven.
Een opmerking over DSL: Net als bij encapsulation in Object Oriented Programming (heel kort afschermen van interne werking van een class/programma) is het maken van een DSL niet een manier om ingewikkelde logica, die jij als programmeur kunt maken, af te schermen voor de minder ervaring (‘domme’) programmeur. Het is een manier van ontwikkelen, om goede leesbare broncode te schrijven.
Alle broncode moet leesbaar zijn, of de code nu encapsulated in een library is of in een compiler is gebouwd. Belangrijkste is, altijd goede, leesbare, begrijpelijke en logische code te schrijven. Er is niet zoiets als slimme maar onleesbare code.