|
|
Als auteur van Algol 68 Genie krijg ik vaak de vraag waarom een fysisch chemicus een Algol 68-compiler heeft geschreven. Dat is een begrijpelijke vraag, aangezien mensen Algol 68 associëren met de geleerde groep wiskundigen en informatici die de taal zo’n vijftig jaar geleden bedachten, en men zich herinnert dat de taal de reputatie had moeilijk te implementeren te zijn. In deze post wil ik graag vertellen hoe Algol 68 Genie tot stand is gekomen.
Mijn eerste kennismaking met Algol 68 dateert uit mijn middelbare schooltijd. Een jeugdvriend, die net was begonnen als eerstejaarsstudent aan de nieuwe faculteit Informatica van wat nu de Universiteit Twente is, liet me kennismaken met het programmeren in Algol 68 met behulp van A68C op een DECsystem 10. Het waren eenvoudige oefeningen, maar aangezien mijn eerste programmeertalen ECOL en later BASIC waren geweest (voor veel mensen destijds de eerste taal), was ik onder de indruk van de elegantie en de expressieve kracht van Algol 68.
In 1982 begon ik als eerstejaarsstudent scheikunde aan de Universiteit van Nijmegen. Scheikundigen programmeerden voornamelijk in Fortran, zoals gebruikelijk was in de natuurwetenschappen. In het nieuwe studieprogramma volgden we echter onze eerste programmeercursussen bij de relatief nieuwe afdeling Informatica. Onze hoogleraar was Kees Koster zelf, een van de auteurs van Algol 68.
Voor deze cursussen moesten we Algol 68-programma’s schrijven die door FLACC op een IBM 4341 werden gecompileerd. Op deze mainframe werd alles (verbindingstijd, CPU-tijd, vellen papier uit de printer …) begroot met behulp van een virtuele valuta, de zogenaamde accounting units. Uiteraard kregen we net genoeg toegewezen om onze practicum opdrachten af te ronden, waardoor er niet veel ruimte was voor extra programmeren.
In die tijd leerde ik Henk Keller kennen, een chemicus die een paar jaar eerder was afgestudeerd en nu bij de afdeling Informatica werkte. Jaren later zou hij een rol spelen bij de uitgave van Algol 68 Genie onder een open-source licentie.
Mijn belangrijkste onderzoeksonderwerp betrof computationele chemie. Daarom schreef ik de meeste code in Nijmegen in Fortran 77. Een tijdlang behoorde ik tot de "zware gebruikers" van het computercentrum van de universiteit, wat ik best wel cool vond. Zelfs bij het programmeren in Fortran bleek de gestructureerde aanpak die ik bij Informatica had geleerd, van grote waarde. Als er geen begeleider in de buurt was die erop stond dat ik Fortran gebruikte, schreef ik mijn programma’s in Algol 68.
Sta me even toe om even af te dwalen en een anekdote te vertellen. Aan het einde van de jaren tachtig waren honderden mainframes over de hele wereld met elkaar verbonden via het BITNET-netwerk. We gebruikten het om bestanden uit te wisselen, maar via het netwerk konden we ook e-mailen en chatten met behulp van Bitnet Relay, een systeem voor instant messaging. We hielden zelfs "relay-feestjes" om chatvrienden uit nabijgelegen landen bij elkaar te brengen. Dit was een sociaal netwerk avant la lettre. Later begon een knappe kop bij CERN infrastructuur zoals BITNET te gebruiken om informatie op verschillende geografische locaties met elkaar te verbinden, wat de basis vormde voor het World Wide Web, en zo ontstond het internet zoals we dat nu kennen.
Na mijn afstuderen kreeg ik mijn eerste onderzoeksbaan aan de Universiteit van Twente, waar ik de jaren daarvoor regelmatig op bezoek was geweest. Aan de faculteit Toegepaste Natuurkunde zette ik mijn onderzoek voort, nu echter met computationele natuurkunde. In Nijmegen was ik een fysisch chemicus, in Twente een chemisch fysicus. Wie het verschil weet, moet me dat maar eens uitleggen, maar dit terzijde. De DEC mainframes waren vervangen door een grote VAX 8650, waarop een ALGOL68RS-compiler onder VMS was geïnstalleerd, dus waar mogelijk bleef ik in Algol 68 programmeren. Productiecode voor lange simulaties werd echter geschreven in C voor Unix-werkstations of in Fortran voor supercomputers.
Thuis had ik een van de eerste pc’s met Pascal onder MS-DOS. Ik heb vele uren doorgebracht met het schrijven van programma’s die expressies konden ontleden of type-uitdrukkingen konden analyseren. Deze ervaring bleek later van pas te komen bij het schrijven van Algol 68 Genie.
De bibliotheek van de UT beschikte over diverse documenten over Algol 68. Ik las bijvoorbeeld over de strategie van Barry Mailloux om declaraties uit clausules te extraheren vóór het ontleden. Een slimme aanpak, aangezien hierdoor de Van Wijngaarden grammatica LALR wordt. Deze documenten inspireerden me om een handmatig gecodeerde Algol 68-parser te schrijven. Destijds leek het me een aardig tijdverdrijf, zonder te beseffen dat het me tot na mijn militaire dienst zou bezighouden.
Algol 68 was een programmeertaal voor mainframes die in computercentra stonden. Na het behalen van mijn doctoraat en mijn militaire dienst had ik daarom geen toegang meer tot een Algol 68-implementatie. Ik had wel mijn handmatig geprogrammeerde parser en raakte gemotiveerd om door te zetten en zelf een implementatie te maken. Daarom schreef ik een modechecker, scope-checker, C-codegenerator enzovoort, en op een gegeven moment vertaalde mijn nog rudimentaire implementatie Algol 68 naar C. Ik kon weer in Algol 68 programmeren!
Tegen die tijd was Linux uitgegroeid tot een volwaardig besturingssysteem en ik maakte er mijn favoriete ontwikkelomgeving van. Omwille van de draagbaarheid en omdat ik een "check-out"-implementatie zolas FLACC wilde, stopte ik met het vertalen naar C en maakte ik een interpreter back-end.
Compileren werd optioneel – indien gewenst zal Algol 68 Genie in aanmerking komende takken in de ontledingsboom dynamisch compileren en linken. Op deze manier worden verschillende elementaire interpreteracties samengevoegd tot één complexe actie. De implementatie is dan ook een hybride tussen een compiler en een interpreter.
Eind 2001, tijdens een reünie van scheikundigen in Nijmegen, besprak ik met Henk Keller mijn hobbyproject. Inmiddels was hij mededirecteur geworden van een advies- en opleidingsbureau op het gebied van Unix. Henk overtuigde me ervan om het project onder een open-source-licentie vrij te geven. En dat heb ik gedaan; Algol 68 Genie was geboren.
Eerlijk gezegd had ik destijds verwacht dat Algol 68 Genie zo’n tien of misschien zelfs twintig gebruikers zou hebben. Ik had het mis; ik zat er een paar ordes van grootte naast. Henk had gelijk: de wereld was verder gegaan sinds Algol 68 en de enige kans die mijn project had om bredere aandacht te krijgen, was het onder een open-source licentie te verspreiden.
Algol 68 Genie is nu beschikbaar via de repositories van grote Linux-distributies zoals Debian Stable en Ubuntu Universe, maar ook via OpenBSD-ports. Dit heeft ertoe bijgedragen dat veel mensen het programma gebruiken en feedback geven in de vorm van bugmeldingen, suggesties, verzoeken om nieuwe functionaliteit, enzovoort. Zonder al die mensen zou het project niet zijn geworden wat het nu is. Algol 68 Genie is zelfs in de academische wereld gebruikt, dus in zekere zin is de cirkel nu rond. Ik zou alleen willen dat Henk er nog was, zodat ik het hem kon vertellen.
|
{"En cuestiones de cultura y de saber,
sólo se pierde lo que se guarda; sólo se gana lo que se da." Antonio Machado.} |