Fortran leeft!

Fortran leeft!

We worden regelmatig benaderd door detacheringsbedrijven die software ontwikkelaars aanbieden. Als ik in een vriendelijke bui ben luister ik even naar hun verhaal en beantwoord ik wat vragen. Eén van die vragen is altijd: wat moet een software ontwikkelaar bij VORtech kunnen? En iedere keer wordt het gesprek dan wat lastig als ik zeg dat we Fortran ontwikkelaars nodig hebben. Het is niet zozeer dat die detacheerders geen Fortran ontwikkelaars kunnen leveren, maar ze kennen de taal meestal niet eens. Ik heb de naam F-O-R-T-R-A-N meer dan eens moeten spellen.

Soms is dat vervelend, maar meestal maakt het me juist een beetje trots. Alsof ik tot een of andere oude sekte uit lang vervlogen tijden behoor die geheime kennis van generatie op generatie doorgeeft. Toch is die sekte helemaal niet zo exclusief en is die kennis helemaal niet zo geheim. In onze niche van wetenschappelijk programmeerwerk is Fortran nog steeds springlevend. Dat de taal voorbij plek 20 staat van Tiobe’s lijst van populaire programmeertalen doet daar niets aan af.

Dus, voor de mensen die niet tot onze sekte (of cultus) behoren, volgen hier een paar redenen waarom we nog steeds werken met een taal waarvan je misschien dacht dat die al lang dood en begraven was.

1. De taaiheid van legacy code

Er bestaat een enorme legacy van bijzonder waardevolle Fortran code. Eigenlijk zou dit ook reden 2 tot en met 5 kunnen zijn voor het voortbestaan van Fortran. Als die legacy er niet zou zijn was het voor Fortran veel moeilijker geweest om te overleven. Veel software pakketten die we vandaag de dag gebruiken voor weersvoorspellingen, stormvloedvoorspellingen, verkeersmonitoring enz. zijn oorspronkelijk ontwikkeld in jaren tachtig. Toen was Fortran de meest gebruikte taal voor dit soort toepassingen (was er eigenlijk wel een andere taal?). Deze pakketten hebben zich meer dan dertig jaar lang ontwikkeld en zijn de weerslag van de kennis en wijsheid van verschillende generaties wetenschappers en ontwikkelaars. Zolang de code voldoende gestructureerd en netjes geschreven is, zou het herprogrammeren ervan zonde van het geld zijn. Dit is een belangrijk argument om door te blijven bouwen op deze sterke grondvesten (zoals we dagelijks doen bij VORtech).

2. Fortran is efficiënt (toch?)

Veel Fortran ontwikkelaars zullen je vertellen dat Fortran extreem efficiënt is en daarom de beste taal voor grote berekeningen. Maar eigenlijk gaat dat niet helemaal op. Een betere formulering zou zijn: “als je het gebruikt voor grote berekeningen dan is het efficiënt”. Of, nog beter: “de taal biedt een eenvoudige manier om grote berekeningen op te schrijven en dat maakt het relatief eenvoudig voor een compiler om daar efficiënte machinecode van te maken”. Die laatste formulering klinkt natuurlijk niet zo flitsend, maar toch: al is het in Fortran misschien eenvoudiger om efficiënte code te maken, de taal is niet per se sneller dan andere talen. Met moderne Fortran dialecten is het zelfs redelijk eenvoudig om inefficiënte code te maken.

3. Fortran is makkelijk te leren

Ook weer een statement waar je mee moet oppassen. De oude versies van Fortran (zoals Fortran77) waren inderdaad vrij eenvoudig te leren (voor sommige mensen). Maar dat geldt ook voor allerlei moderne talen zoals Matlab, Python en R. Als je nog nooit eerder geprogrammeerd hebt, zal je vast niet zeggen dat Fortran90 (bijvoorbeeld) zo eenvoudig is om te leren. Persoonlijk ben ik niet kapot van de nieuwe constructies in Fortran95 en latere versies. Ik vind andere talen in veel opzichten veel intuïtiever. Aan de andere kant hebben de moderne Fortran varianten dan wel weer veel van de narigheid opgeruimd die tot hele lelijke code leidde, zoals het gebrek aan dynamisch geheugen, de impliciete typecasting en de ellendige GOTO’s. En dat brengt me dan op een ander punt. Als een taal makkelijk is om te leren kunnen ook ongetrainde ontwikkelaars er makkelijk mee aan de slag. En we weten allemaal waar dat toe kan leiden. In dat opzicht is het niet per se een aanbeveling dat Fortran makkelijk te leren is.

4. Fortran is goed voor HPC

Dat is waar. Op alle High Performance Computing platforms die ik gebruikt heb (met slechts één uitzondering) was een heel goede Fortran compiler beschikbaar (hoewel er eerlijk gezegd ook steeds een C-compiler was, zelfs daar waar de Fortran compiler ontbrak). De reden daarvoor is ongetwijfeld dat software voor zware berekeningen meestal geschreven is in Fortran en dat supercomputers met name voor dat soort software gebruikt worden. De taal Fortran heeft vrij snel allerlei parallelle constructies geïntroduceerd (zoals FORALL en WHERE in Fortran95). Ik weet niet hoe populair die nu nog zijn, omdat we dat soort dingen veel met OpenMP annotaties doen, maar het blijft een feit dat Fortran al heel lang met parallellisme om kan gaan. Samen met argument 2 maakt dat Fortran aantrekkelijk voor High Performance Computing.

5. Er zijn goede numerieke bibliotheken

Dit is eigenlijk een andere vorm van de eerdere argumenten. Fortran is decennialang de meest populaire taal geweest voor High Performance Computing (wat meestal lineaire algebra is). Het is dan ook logisch dat er een flinke voorraad hele goede numerieke bibliotheken is, die goed onderhouden zijn en geoptimaliseerd zijn voor moderne hardware. Maar opnieuw: dit argument geldt alleen als je graag in Fortran programmeert. Andere talen hebben net zulke goede numerieke bibliotheken, hoewel die misschien net iets minder compleet zijn. En dan nog: je kunt de Fortran bibliotheken vaak net zo goed gebruiken vanuit andere talen.

Samenvattend: als je voortbouwt op een goed Fortran pakket is het nergens voor nodig om naar een andere taal te gaan. En voor bepaalde nieuwe applicaties is Fortran net zo’n goede keuze als andere talen. Oud betekent niet per se overbodig, zelfs bij wetenschappelijke berekeningen.

Mark Roest