Taalontwerp op hoog niveau

'Als het stoplicht op groen staat, doorrijden tot de vierde zijstraat, daar rechtsaf en dan rechtdoor tot de rotonde.' Iedere dag programmeren we onszelf en elkaar om via simpele instructies tot een gewenst eindresultaat te komen. Dat is ook het principe van de computer, waarbij de lijst met instructies een programma vormt, geschreven in een programmeertaal. Sinds de allereerste programmeertalen in de jaren ‘50 is de computer spectaculair verder ontwikkeld en zijn er steeds meer programmeertalen verzonnen. De teller staat inmiddels op enkele duizenden. Die ontwikkeling is nog lang niet voorbij, aldus Eelco Visser, Antoni van Leeuwenhoek Professor en hoofd van de Programming Languages Group aan de TU Delft. 'De natuurlijke talen die we als mensen met elkaar spreken evolueren met ons mee. Op dezelfde manier moeten programmeertalen met computers mee evolueren. We begrijpen steeds beter hoe dat moet, programmeren. Op basis van dat voortschrijdende inzicht wil ik het makkelijker maken om nieuwe programmeertalen te ontwikkelen.’

Van laag naar hoog niveau

Gemak dient de mens, en dat is ook het uitgangspunt van de evolutie van programmeertalen. Toen computers complexer werden, werden de programma’s al snel opgedeeld in een laag-niveau taal, waarmee de machine rechtstreeks wordt aangestuurd, en een hoog-niveau taal, waarmee de menselijke programmeur werkt. De vertaling van hoog naar laag niveau is het werk van de compiler. Zoals Visser’s favoriete quote (door programmeerpioneer Alan Perlis) het samenvat: 'Een programmeertaal is laag-niveau als de programma’s in deze taal zich bezighouden met irrelevante zaken'. Met zijn onderzoek ontdoet Visser programmeertalen en zelfs het maken van programmeertalen van irrelevante details. Abstraheren, noemt hij het. Een hoger niveau van abstractie helpt programmeertaalontwerpers en programmeurs al hun aandacht te richten op wat hun programma’s moeten kunnen doen. 

Gemak dient de mens, en dat is ook het uitgangspunt van de evolutie van programmeertalen

Taalwerkbank Spoofax

Een belangrijke reden dat er continu nieuwe programmeertalen ontwikkeld worden, is de trend om domeinspecifieke talen te gebruiken. 'Om het programmeren makkelijker te maken, heb je het liefst een programmeertaal die naadloos aansluit op de specifieke toepassing, zoals bijvoorbeeld een internetwinkel. Hoe dichter de taal bij de toepassing staat, hoe sneller de programmeur kan werken, en hoe minder fouten er gemaakt worden. Daarom hebben wij Spoofax ontwikkeld: een platform of language workbench waarmee razendsnel een kant-en-klare domeinspecifieke taal ontwikkeld kan worden. Spoofax maakt gebruik van vaste onderdelen in programmeertalen. 'Het idee is dat er allerlei overeenkomsten zitten in de implementatie van programmeertalen; die kunnen we hergebruiken. Ook kunnen we redelijke en brede aannames maken over het ontwerp van een programmeertaal.' Vissers platform koppelt die vaste onderdelen en aannames aan het ontwerp op hoofdlijnen van de nieuwe taal in wording. Het resultaat is een compleet functionele taal zonder dat je als ontwerper over de details na hebt hoeven denken. 'Een nieuwe programmeertaal ontwikkelen kan jaren duren en veel geld kosten. Met onze workbench laat ik studenten binnen een semester een kleine programmeertaal bouwen.' Taalontwerpers die werken met Spoofax bedenken een grammatica en enkele andere basisregels waar de taal aan moet voldoen, die zetten ze in de workbench en daaruit rolt een kant-en-klare programmeeromgeving. Er kan vervolgens meteen geprogrammeerd worden in de nieuwe taal.

Een complete programmeertaal, zonder dat je over de details hoeft na te denken

Meer doen met minder werk

Als voordelen van nieuwe programmeertalen worden vaak genoemd dat ze sneller en veiliger zijn. Zijn snelheid en veiligheid zaken waar Visser zich zorgen om maakt? 'Programmeurs vinden het leuk om moeilijke dingen te doen: hoe moeilijker hoe beter. Wij maken het juist makkelijker. In die zin zijn betere programmeertalen niet per definitie de vriend van de programmeur. Toch is er veel vraag naar onze innovaties. Immers, een nieuwe taal kan veiliger zijn doordat het ontworpen is om veelvoorkomende veiligheidsrisico’s uit te sluiten. Dat scheelt de programmeur een hoop hoofdbrekens. Uiteraard is een hogere productiviteit ook belangrijk. We hebben nu een groot tekort aan informatici. De studentaantallen in onze opleidingen zijn de laatste jaren weliswaar omhooggegaan maar nog altijd niet genoeg om aan de vraag te voldoen. Dus als we kunnen zorgen dat programmeurs meer kunnen doen met minder werk, dan is dat winst. Ik zie onze workbenches geen banenverlies veroorzaken. Wel helpen ze de kwaliteit verder te verhogen. Vergeet niet dat we met de allereerste programmeertalen uit de jaren ‘50 nooit de huidige software in onze smartphones en laptops hadden kunnen realiseren.'

17 miljoen programmeurs

Moet ieder kind dan maar leren programmeren? Hier denkt Visser lang over na. Opnieuw maakt hij een onderscheid tussen algemene principes en implementatiedetails. 'Neem nou het Microsoft-programma Excel. Eigenlijk is het een programmeeromgeving dat, net als Spoofax, de irrelevante details uit handen neemt. Omdat het is ontworpen als een spreadsheet, kun je eenvoudige rekenformules programmeren zonder al te veel voorkennis. Dankzij die interface zijn we dus allemaal programmeurs geworden. Maar het zou goed zijn als mensen meer weten over de algemene principes: Hoe verwoord je wat een programma moet doen? Hoe verwerk je data? Wat is automatisering? Ik heb liever dat mensen daar wat meer over weten dan dat we 17 miljoen gecertificeerde programmeurs opleiden.'

Als we kunnen zorgen dat programmeurs meer kunnen doen met minder werk, dan is dat winst

Ruige randjes

Te midden van de coronacisis had Visser ook wat te vieren. Zijn Spoofax werd eind 2020 bekroond door de toonaangevende programmeerconferentie OOPSLA. 'We hebben een prijs gekregen voor de impact van onze originele publicatie van 2010. Die beschreef de principes achter Spoofax – werk dat we de tien jaar daarvoor hadden gedaan. Inmiddels zijn we weer een stuk verder. De prijs voelt dus als een bekroning op twintig jaar werk.' Toch geeft Visser toe dat Spoofax niet bepaald de populairste language workbench is van de stuk of tien die er in omloop zijn. 'We pakken het maken van een nieuwe programmeertaal echt principieel aan door zoveel mogelijk taalaspecten in een ‘metataal’ vangen. Om dit te kunnen doen, proberen we bijvoorbeeld te begrijpen hoe grammatica’s werken zodat we daar automatisch alle relevante ingrediënten uit kunnen afleiden. Niet zozeer de workbench maar onze zoektocht naar die fundamentele principes heeft impact op het vakgebied. Spoofax zelf is vooral een onderzoekstool met ruige randjes, waar we telkens dingen aan toevoegen.'

Dynamische semantiek

Op Vissers wensenlijstje van toevoegingen aan Spoofax staat inzicht in de zogenaamde dynamische semantiek. Waar de statische semantiek vastlegt hoe een gezond programma eruitziet, beschrijft de dynamische semantiek hoe het programma en de uitvoering ervan samenhangen. 'De statische semantiek hebben we inmiddels goed onder de knie. We willen nu ook de dynamische semantiek kunnen uitdrukken. Hoe moet een programma zich gedragen tijdens het uitvoeren ervan? Kunnen we daar algemene principes uit abstraheren? Het antwoord op die vragen kan helpen om het maken van nieuwe talen verder te vereenvoudigen. Het is een uitdaging waar we al een tijd aan werken maar nog niet helemaal uit zijn.

Omdat Spoofax nieuw was, ben ik zelf maar toepassingen gaan ontwikkelen

Webprogrammeertaal

Wil Visser Spoofax niet breder aan de man te brengen? 'Natuurlijk wel. Maar bedrijven zijn vooral geïnteresseerd in bewezen technologie. Omdat Spoofax nieuw was, ben ik zelf maar toepassingen gaan ontwikkelen. Ik had een jaar lang geen onderwijsverplichtingen en die tijd heb ik nuttig gebruikt. Het resulteerde in de webprogrammeertaal WebDSL. Het is speciaal afgestemd op de complexiteiten van programma’s die over het internet werken.' Visser stelde een ‘academic workflow engineering team’ samen om WebDSL te gaan inzetten voor de eigen academische werkomgeving, op toepassingen die veelgevraagd zijn aan universiteiten. 'Denk aan programmeertraining via de internetbrowser, jaarlijkse cursusevaluaties en online tools voor wetenschappelijke conferenties. In plaats van telkens opnieuw het wiel uitvinden, maken wij met WebDSL kant-en-klare oplossingen. Deze worden inmiddels breed ingezet in Delft en bij andere universiteiten. Het bespaart mijn collega’s en mijzelf veel tijd. We krijgen feedback uit het veld en dankzij het gebruiksgemak van WebDSL kunnen we die meteen verwerken. Het is echt de moeite waard.' Visser is vastbesloten om zijn webprogrammeertaal ook in andere sectoren te gaan toepassen.

Irrelevante zaken

De korte lijn tussen gebruikerservaringen en programmaverbeteringen gaat Visser aan het hart: 'Pas als je daadwerkelijk met nieuwe programma’s gaat werken, ontdek je wat je eigenlijk wil. Er ontstaan dan meteen nieuwe ideeën en eisen, waarmee je de verdere ontwikkeling kunt bijsturen. En hoe dichter de programmeertaal bij de toepassing staat, hoe makkelijker het is om die verbeteringen door te voeren.' Het is een prestatie waar Visser trots op is en die aansluit bij zijn eerdergenoemde favoriete quote. 'Onze workbench neemt de irrelevante zaken uit handen, zodat je zicht houdt op de hoofdzaken. Daardoor kun je veel sneller en met minder mensen functionaliteit bewerkstelligen. Dat hebben we de afgelopen jaren bereikt, en daar wil ik de komende jaren nog meer slagen maken.'