Maart 2022

Ik heb oude Fortran-code op de plank liggen die ik nog steeds gebruik en onderhoud. Ik zou hoogwaardige, vrij beschikbare compilers kunnen gebruiken, maar die voldoen niet aan mijn behoefte aan multi-precision types. Daarom heb ik met veel plezier VIF (Vintage FORTRAN) geschreven, een recht-toe-recht-aan GCC front-end die het grootste deel van Fortran  IV/66/77 naar C99, waarbij gebruik wordt gemaakt van GCC-extensies om de efficiëntie te verbeteren, ten koste van het weglaten van enkele zelden gebruikte instructies zoals ENTRY, waarvoor geen direct equivalent in C bestaat. Daarom compileert VIF de meeste, maar niet alle verouderde broncode, maar kan het wel pakketten zoals BLAS of LAPACK compileren.

In de jaren tachtig volgden studenten in de natuurwetenschappen, zoals ik, een cursus gestructureerd programmeren bij de destijds jonge afdelingen informatica. Mijn alma mater onderwees Algol 68; het behoeft geen betoog dat Algol 68 uitermate geschikt is voor het aanleren van gestructureerd programmeren, een vaardigheid waar je je hele leven profijt van hebt. Echter, elders binnen de natuurwetenschappelijke en technische faculteiten raadden docenten het gebruik van een dergelijke taal voor productiewerk af. In die tijd was Fortran het dominante werkpaard voor serieus numeriek werk.

Fortran is een van de weinige talen die zich specifiek richt op ingenieurs en wetenschappers. Het is in wezen een enorme rekenmachine waaraan allerlei functies zijn toegevoegd. De reden dat het eruitziet als een algemene programmeertaal, is wellicht dat er vijftig jaar geleden veel minder gespecialiseerde programmeertalen waren dan vandaag de dag. Lange tijd waren je keuzes beperkt tot Fortran, COBOL of misschien iets esoterisch zoals ALGOL.

Zeker, Fortran wordt tot op de dag van vandaag nog steeds herzien, maar hierover bestaat discussie, aangezien nieuwe functionaliteit oude code kunnen breken of ervoor kunnen zorgen dat de taal te veel gaat lijken op al bestaande talen die mensen juist van Fortran hebben weggehaald. Voor veel nieuwe wetenschappelijke of machine learning-projecten waarbij pure snelheid niet het doorslaggevende criterium is, kiezen mensen voor nieuwkomers zoals Python. Zelf gebruik ik tegenwoordig ook Python. Nota bene, verschillende numerieke Python bibliotheken gebruiken Fortran onder de motorkap.

Vroeger waren de redenen om Fortran te gebruiken, zelfs tegen je zin, overtuigend. Omdat het gericht was op berekeningen, konden studenten in de exacte wetenschappen of techniek het gemakkelijk on-the-job leren. Computercapaciteit was duur, dus gebruikers moesten betalen om er gebruik van te maken, en Fortran haalde nu eenmaal het maximale uit je beperkte budget. Het was alomtegenwoordig en porteerbaar, waardoor er een grote hoeveelheid goed geteste Fortran-toepassingen en bibliotheken bestond. Op supercomputers was het je enige optie om porteerbare software te schrijven. Kortom, je productiviteit en samenwerkingsvermogen hingen af van het feit of je deze taal omarmde.

Op vijfenzestig-jarige leeftijd behoort Fortran nog steeds tot de snelste talen die er zijn voor numerieke toepassingen. Omdat Fortran populair en belangrijk was, beschikt het over degelijke optimaliserende compilers die hoogwaardige code produceren. Een van de technische redenen voor de snelheid van klassiek Fortran was dat programmeurs geen mogelijkheid hadden tot het manipuleren van pointers, waardoor een optimaliserende compiler meer kon doen.

VIF is waarschijnlijk de enige vintage Fortran-implementatie met REAL*32 en de bijbehorende COMPLEX*64-typen, voldoende om veel toepassingen met meervoudige precisie aan te kunnen. VIF wordt geleverd met een wiskundige bibliotheek die is opgebouwd uit vintage, openbaar beschikbare broncode. Als je VIF eens wilt uitproberen en de vreugde en het leed van het programmeren in klassiek Fortran wilt ervaren, kun je het hier vinden. Houd er echter rekening mee dat VIF een experimentele compiler is, en niet is bedoeld als productietool. Overweeg voor productiewerk bijvoorbeeld GNU Fortran.

Eerlijk gezegd programmeer ik tegenwoordig niet zo veel meer in Fortran, maar voor het wiskunde-project van mijn dochter op de middelbare school - over het leven en werk van Katherine Johnson – heb ik een eenvoudige demo geschreven voor het integreren van differentiaalvergelijkingen met behulp van de methode van Euler, om LEM-landingen op de maan te simuleren. Een uitgebreide, ouderwetse VIF-uitvoer van dit programma is hier te vinden. Het is onbetaalbaar om het gezicht van een kind te zien wanneer dit futuristische programmeervoorbeeld er daadwerkelijk in slaagt een LEM veilig op het maanoppervlak te laten landen.

Gedurende mijn hele carrière zijn er voortdurend voorspellingen geweest over de naderende uitfasering van Fortran. Toch is het er nog steeds, en niet alleen omdat NASA enkele jaren geleden op zoek was naar een Fortran-goeroe om aan vintage software van het Voyager-project te werken, of programmeurs benaderde om Fortran-code te optimaliseren voor de Pleiades-supercomputer.

Waarschijnlijk is de reden dat Fortran steeds weer in ranglijsten van programmeertalen opduikt, het voortdurende gebruik ervan bij intensieve rekenbewerkingen. Wie zou er nu overwegen om middelen te investeren in het herschrijven en opnieuw testen van ontelbare regels beproefde productiecode, tenzij daar een goede reden voor is? Innovatie vereist meer dan alleen het vervangen van iets dat goed werkt in kritieke toepassingen, door iets nieuws.

Vermoedelijk zal Fortran blijven bestaan zolang de enorme hoeveelheid code die erin is geschreven, in gebruik blijft. Alleen de tijd zal de toekomst van Fortran uitwijzen, hoewel ik ervan overtuigd ben dat het mij in ieder geval zal overleven.


Fortran
Computergeschiedenis


Deze website is gearchiveerd door de KB, nationale bibliotheek.

© J.M. van der Veer   •   jmvdveer@algol68genie.nl