Het is moeilijk efficiënt te programmeren voor multicore-processoren. Dat hoeft helemaal niet, vertelt Joe Armstrong die begin jaren tachtig de functionele programmeertaal Erlang ontwierp. Dat soort talen leent zich goed voor parallelle programma’s.
Onlangs deed Joe Armstrong Nederland aan. Zijn boek Programming Erlang verscheen juli vorig jaar en werd meteen een bestseller. Opmerkelijk, want Armstrong ontwierp en implementeerde de functionele programmeertaal Erlang al in de jaren tachtig voor Ericsson. Sindsdien kende Erlang slechts een zeer bescheiden aantal gebruikers, tot anderhalf jaar geleden. Computable sprak met Joe Armstrong over programmeren in multicore systemen, zijn plotselinge succes en ‘out of the box'-denken.
Het is een lastige kwestie voor processorfabrikanten als Intel. Zij zijn er allang klaar voor: zij kunnen multicore-processoren leveren die zóveel extra rekenkracht en snelheidswinst bieden. Nu nog met enkele kernen, maar over een paar jaar met honderden of zelfs duizenden kernen. De softwaremarkt blijft echter vooralsnog achter. Er is geen goed bruikbare programmeertaal voor multicoresystemen. Althans, plots was daar het boek van Joe Armstrong getiteld Programming Erlang. Geen nieuwe taal, maar eentje van niet minder dan twintig jaar oud.
Bestaan in de marge
Dezelfde Joe Armstrong, nog altijd softwarearchitect bij Ericcson, was de belangrijkste man achter de ontwikkeling van Erlang. Hij implementeerde de eerste versie in 1986. Even was Erlang populair, maar het aantal gebruikers daalde al snel. De taal verdween niet, gebruikers zijn er altijd gebleven, maar leidde toch een bestaan in de marge. Anno 2008 is de belangstelling voor Erlang echter groter dan ooit. Waarom? Wellicht omdat je met functionele programmeertalen als Erlang multicore-systemen wél optimaal kunt gebruiken. Reden voor ict-bedrijf Sioux, gespecialiseerd in embedded software, om Armstrong te laten vertellen over Erlang en het eventuele nut van deze taal voor programmeren in multicore-systemen.
Onder de titel ‘Hot or Not' organiseert Sioux sessies waarvoor het ict'ers naar Nederland haalt die aan de wieg stonden van een belangrijke ontwikkeling. Zo is Armstrong al voorgegaan door Linux-grondlegger Alan Cox en RUP-expert (Rational Unified Process) Ivar Jacobson. Begin mei was Armstrong in Eindhoven waar hij een meerdaagse cursus verzorgde voor medewerkers van Sioux en een lezing gaf waar ongeveer honderd geïnteresseerde ict'ers uit heel Nederland op af kwamen.
Blij met de aandacht
Armstrong, 57 jaar, Engelsman van geboorte, maar al "langer dan de helft van zijn leven" woonachtig in Zweden, is een vrolijke, hartelijke man, die graag met zijn handen praat. Hij is overduidelijk blij met de aandacht die hij krijgt sinds zijn boek Programming Erlang medio 2007 uitkwam en meteen een bestseller werd. Toch heeft hij nog wel iets te klagen. "Ik vind het geweldig, ik ontmoet zoveel interessante en ontzettend aardige mensen, maar ik kom qua werk helemaal nergens meer aan toe. De afgelopen maand heb ik op vijf conferenties gesproken. Ter vergelijking: twee jaar geleden kreeg ik ongeveer één uitnodiging per jaar."
Hoe verklaart u de enorme, plotselinge belangstelling voor Erlang?
"Je vraagt me: wat heb je gedaan? Geen idee, gewoon geluk gehad. Niet alleen voor Erlang is er veel belangstelling, ook voor andere functionele programmeertalen zoals Haskell, is de belangstelling gigantisch. En dat is allemaal gebeurd in de laatste 18 maanden. Misschien heeft mijn boek Programming Erlang iets in gang gezet. Mijn timing was in elk geval goed."
Heeft het iets te maken met marketing: meer cursussen en beter onderwijs in Erlang? Wellicht ook in combinatie met de opkomst van multicore-systemen?
"Nee, ik denk niet dat het iets met marketing te maken heeft. Voor multicore-systemen is inderdaad veel interesse. We weten nu hoe we ze moeten programmeren: met functionele programmeertalen. Die blijken daarvoor veel beter geschikt te zijn dan talen als Java, C of C++. En dat is een grote stimulans."
"Misschien is een verklaring voor het succes dat ontwikkelaars teleurgesteld zijn in de meest gebruikte talen. Voor nieuwe talen ontstaat er aanvankelijk een enorm enthousiasme. Iedereen gelooft: dit gaat al onze problemen oplossen. Zo dacht men tot voor kort over Java. Dat is nu voorbij: Java is niet trendy meer, het enthousiasme is weg. Zo verging het voorganger Ruby ook. Nu zijn functionele programmeertalen het helemaal. En dat is opmerkelijk, want ze zijn niet nieuw. Ze zijn echt oud. De basis is wiskunde uit de jaren dertig."
"Er speelt nog iets meer: als je boek genoeg aandacht krijgt door stom toeval, dan kan het plots uit zichzelf meer aandacht vergaren. Je kunt er een wiskundig model op loslaten. Mijn boek kwam op nummer 1 terecht en bleef daar tijden staan. Mensen kopen het omdat het in de top 10 staat. Er ontstaat een sneeuwbaleffect. Én, Erlang heeft kunnen rijpen. Er zit twintig jaar aan ontwikkeling in. En niet alleen door mij: honderden mensen hebben er jarenlang aan gewerkt. Het is sowieso goed."
De interesse is er. Toch zijn er nog altijd weinig Erlang-gebruikers. Waarom?
"Ook grote talen waren eens klein! Het aantal gebruikers groeit enorm."
Komen er nu meer trainingen in Erlang?
"Niet door mij. Er zijn bedrijven die dat doen; bijvoorbeeld een adviesbureau in Londen dat trainingen geeft. Erlang-programmeurs zijn niet aan te slepen. De bedrijven die ze leveren, groeien met de maximale groei die ze aankunnen."
Zijn er nadelen aan Erlang?
"Oh ja, absoluut. Het is moeilijker om dingen te doen waar een taal als C juist heel bruikbaar voor is. Het snel manipuleren van het geheugen is moeilijker in Erlang. Net als bijvoorbeeld video coding. Erlang is niet handig voor dingen die een hele kleine memory footprint nodig hebben: je kunt er geen wasmachine mee programmeren. Ook voor het programmeren van graphics in games heb je niet veel aan Erlang. Daarvoor is C++ het meest bruikbaar."
"Erlang is goed te gebruiken in controller logics. Over het algemeen loopt hardware niet echt efficiënt op Erlang, net zo min als op Haskell of andere functionele programmeertalen. Dat kan overigens wel, als je het echt zou willen. Maar dat vergt aanpassing van hardware."
Waarom is Erlang zo nuttig voor het programmeren in multi- of manycore systemen?
"Multicore-chips zijn de toekomst. Het verhogen van de kloksnelheid heeft nu eenmaal een limiet. Stel dat we in 2019 een miljoen cpu's krijgen: en waarom niet? Ik heb nu op mijn werk 64 cpu's. Het verdubbelt elk jaar. Over tien jaar hebben we de miljoen bereikt. Als je een programma schrijft dat loopt op een van die cpu's en de andere 999.999 doen helemaal niks of nauwelijks iets; dat gaat nergens over. Dus, de kern van programmeren is de rekencapaciteit verspreiden over de cpu's. En met Erlang kan dat. Ik denk graag dat de Erlang-gemeenschap daarin voorop loopt."
Is een taal als Java zo aan te passen dat die wel goed bruikbaar is voor het schrijven van software voor multicore-systemen?
"Nee. Nou ja, niets is onmogelijk, maar het is ongelooflijk moeilijk. Dat heeft te maken met thread safety. Als je twee threads hebt, moet je kunnen garanderen dat ze niet door elkaar heen lopen. Als je niet kunt garanderen dat ze elkaar niet in de weg gaan zitten, dan is multicore-gebruik uitgesloten. Je wilt namelijk cores en computers parallel gebruiken. Het is een fundamentele eigenschap van talen als Java dat ze niet thread safe zijn. Daar is niets aan te doen. Die talen zijn zo gemaakt."
Hoe denkt u over een nieuwe taal, gebaseerd op Erlang, geschreven door u?
"Nee, niet door mij. Ik heb het al gedaan: ik weet hoeveel werk het is. Maar ik ben er wel een groot voorstander van. Overigens zijn verschillende groepen jonge ict'ers daar mee bezig: alle bestaande technologie overboord gooien en met de kennis van nu opnieuw schrijven." Armstrong roept uit: "Laten we ict opnieuw uitvinden en alles tienduizend keer korter maken"
"Ik word enorm enthousiast van die manier van denken. Er zijn zoveel dingen die beter kunnen. En dat is maar goed ook. Stel je voor, er komt iemand met de ultieme technologie. En dan, wat gaan we dan doen de komende tienduizend jaar? Bovendien hebben we echte problemen vandaag de dag. We hebben milieuproblemen en we moeten heel snel naar zero energy computing."
"Oplossingen zijn er altijd. We moeten ze alleen zien. Mensen zijn vaak blind voor juist dat wat vlak voor hun neus ligt. Zo is het ook met de ontwikkeling van Erlang gegaan: de basis is wiskunde, en wij hebben bepaalde wiskundige wetten losgelaten. Veel mensen denken dat dit niet kan of dat het moeilijk is. Maar dat is het niet. Het is alleen maar een andere manier van kijken."
De meerderheid regeert. Als iedereen C# (met .Net) en Java blijft gebruiken zullen er vanzelf manieren bedacht worden om deze talen wel thread-safe te krijgen. Dat is misschien niet altijd de netste manier maar kijk eens naar de x86 instructieset.. snel in elkaar geflasnt maar nog steeds in gebruik na 30 jaar.
Ik zet mijn geld op de compilers die ervoor zorgen dat programma’s naar multi/paralel thread worden gecompileerd.
Threadsafety bestaan al sinds 1983 bij het ontstaan van de eerste versie van Ada. Inmiddels is er Ada 2005 (dit jaar gestandaard door ISO/IEC) waarin nieuwe technieken zijn opgenomen om het threadsafety om te kunnen gaan.
Met name het reduceren van overhead veroorzaakt door task switching en exception handling en de task rendez-vous zijn zeer krachtige aspecten van Ada.
Ada is helaas buiten het safety/security domein weinig bekend, maar de vliegtuig en ruimtevaart industrie gebruiken het al jaren!