In Amsterdam vindt op 8 en 9 oktober de conferentie Declarative Amsterdam plaats. Sprekers zullen presentaties geven over opgedane ervaringen, trends en het toekomstperspectief op gebieden als functioneel programmeren, declaratief modelleren, databases, xml en afgeleide talen, zoals json, css, data-visualisatie, formele grammatica’s, parseren en domein-specifieke talen.
In de begintijd van computers werden computers geleverd inclusief een team van programmeurs. De prijs was gebaseerd op die van de hardware. Tegenwoordig is dat omgekeerd; het ontwikkelen van software kost veel tijd, geld en mankracht, en levert ook nog eens vaak totaal mislukte projecten op.
Niet hoe maar wat
Met declaratief programmeren beschrijft de softwareontwikkelaar niet ‘hoe’ een programma iets moet doen, maar ‘wat’ het programma moet doen. De computer bepaalt vervolgens hoe dit resultaat is te bereiken. Dit principe wordt al op diverse deelgebieden van de informatica gebruikt, waaronder user interfaces en databases. Een simpel voorbeeld is de sql-query
SELECT * FROM Users WHERE Country=’NL’
Om een sql-query uit te voeren zal een sql-processor de query analyseren, waar mogelijk optimaliseren (bijvoorbeeld door de volgorde van operaties te veranderen), en bepalen welke indexen gebruikt kunnen worden. Deze code die de computer ‘onder water’ uitvoert is veel complexer dan de oorspronkelijke query, en zou voor een menselijke programmeur veel meer tijd gekost hebben om te schrijven en te debuggen.
Een ander voorbeeld is ’two-way data binding’ in user interfaces, zoals gebruikt in (onder andere) XForms, React en Vue. Dit mechanisme koppelt een (gestructureerd) data model aan user interface elementen, zonder te specificeren hoe deze koppeling precies tot stand komt. Andere aspecten van user interfaces, zoals afhankelijkheden tussen velden, zijn ook makkelijker vast te leggen op een declaratieve manier. In XForms kun je bijvoorbeeld met één regel code vastleggen dat een invoerveld zichtbaar of actief is, op basis van de inhoud van andere invoervelden. Denk aan het invullen van een ‘state’ als het land ‘VS’ is.
Reductie complexiteit
Waar declaratief programmeren is toegepast, heeft het geleid tot een reductie van de complexiteit van code,de omvang van teams en de doorlooptijd van projecten. Het basisidee is dat procedurele code (zoals gangbaar in bijvoorbeeld Java) wordt vervangen door een beschrijving van de relaties tussen de onderdelen van een systeem. De computer interpreteert en optimaliseert die beschrijving en implementeert daarmee het systeem. De omvang van declaratieve programmacode is veel kleiner, soms maar een kwart van procedurele code. Het resultaat is software die minder bugs bevat, sneller (en goedkoper) ontwikkeld is, en makkelijker te onderhouden is.
Declaratief programmeren is bekend binnen databases en user interfaces, maar is bruikbaar voor veel meer toepassingsgebieden. Het vereist wel een andere mind-set van softwareontwikkelaars, en wordt daarom nog maar weinig gebruikt. De conferentie Declarative Amsterdam wil bijdragen aan een betere bekendheid en waardering van declaratieve methoden in softwareontwikkeling.