CWI zet programmeertalen in gelid
Een promovendus van het CWI heeft een betere techniek bedacht om programmeertalen te onderzoeken op het voorkomen van dubbelzinnige constructies. Een programma dat in zo'n taal is geschreven kan daardoor fouten maken met alle ellende van dien.
Fouten die worden veroorzaakt door dubbelzinnigheden zijn heel lastig te vinden en het is doorgaans ook erg kostbaar om ze te repareren. Promovendus Bas Basten van het Centrum Wiskunde & Informatica (CWI) in Amsterdam ontwierp nieuwe tools en technieken om zulke ambiguïteiten te vinden. Volgende week verdedigt hij zijn proefschrift 'Ambiguity Detection for Programming Language Grammars' aan de Universiteit van Amsterdam.
De tools van Basten voeren een analyse uit op de 'grammatica' van programmeertalen. Die controle kan wel 1000 keer sneller gaan in vergelijking met bestaande technieken. Met het resultaat van een analyse kan een software engineer goed uit de voeten. Probleemgebieden zijn al van te voren bekend en die kunnen vermeden worden.
Meneer van Dalen...
De analyse heeft veel weg van het vroeger veel gebruikte ezelsbruggetje 'Meneer Van Dalen wacht op antwoord'. Dat duidde de volgorde aan waarin rekenkundige bewerkingen moesten worden uitgevoerd: machtsverheffen, vermenigvuldigen en delen, worteltrekken en dan pas optellen en aftrekken. De som 2+4*3 is volgens de rekenregels gelijk aan 2+(4*3)=14, maar wie de regel niet kent, kan uitkomen op het antwoord (2+4)*3 = 18.
Als het voor een computer niet duidelijk is welke handeling hij eerst moet doen, dan kan er 'spraakverwarring' tussen de programmeur en de computer optreden, waardoor er fouten in de software kunnen ontstaan. Het is daarom belangrijk dat alle dubbelzinnigheden worden opgelost voordat een taal in gebruik wordt genomen. Omdat er oneindig veel combinaties van operatoren zoals + en * bestaan, gebeurt het regelmatig dat makers van nieuwe programmeertalen een dubbelzinnige combinatie over het hoofd zien bij het ontwerp.

Reacties
Hi Kurt. Er zijn twee redenen waarom er gewerkt wordt aan programmeertalen en de grammatica's daarvan. De eerste is in het maken van nieuwe tools voor bestaande talen, soms legacy talen. Dan moet je de taal "reverse engineren" om te proberen het gedrag van een bestaande interpreter of compiler na te bootsen. De tweede reden is nieuwe domein specifieke talen. Dat is nu weer helemaal in. Ook in die talen wil je ambiguiteit voorkomen.
Nu ben ik geen geleerde promovendus waardoor ik het niet helemaal snap. Ik begrijp dat dit soort problemen bestaan. Echter ik krijg nu het gevoel dat er bijna dagelijks nieuwe programmeertalen ontstaan. Dat vind ik nogal veel.
Het probleem herken ik echter wel. Als er 'slordig' geprogrammeerd wordt, kan het zijn dat hetzelfde programma (applicatie) het op het ene operatingsysteem met andere uitkomsten komt dan hetzelfde programma met een ander (andere versie) van het OS.