Twintig jaar geleden kwam hij naar de VS, waar hij bekend werd als de auteur van de succesvolle object-georiënteerde programmeertaal C++. Dr. Bjarne Stroustrup over de toekomst van zijn taal, ontwikkelen op basis van componenten, Java en centralisatie.
Bjarne Stroustrup was in Amsterdam op uitnodiging van het Centrum voor Wiskunde en Informatica (zie kader) om te spreken op de tweede Soirée van dit centrum. Hij studeerde wiskunde en informatica in Aarhus, promoveerde in Cambridge en ging werken in het onderdeel van Bell Labs dat nu AT&T Labs heet. Stroustrup werkt daar nu twintig jaar en heeft naar eigen zeggen slechts twee, door hem zelf geïnitieerde, reorganisaties meegemaakt. En hij is altijd in hetzelfde gebouw gebleven – een unicum, niet alleen in de VS.
Zijn afdeling heet Large-scale Programming Research, voor onderzoek op het gebied van grote systemen. Naast het managen blijft er nog wel voldoende tijd over voor technisch werk, Stroustrup: "Ik besteed hooguit tien procent aan management. Hoe ik dat doe? Mensen aannemen die ik niet hoef te vertellen wat ze moeten doen! Dat is een voorwaarde om voor mij te komen werken."
Over de ontstaansgeschiedenis van C++ vertelt Stroustrup: "C++ is een verdere ontwikkeling van C, de programmeertaal die Dennis Ritchie – evenals Bryan Kernighan een goede collega bij AT&T Labs – ontwikkelde, en die vooral gebruikt wordt door de Unix-gemeenschap. Het probleem waarmee ik zat, was dat ik voor mijn experimentele werk op het gebied van gedistribueerde systemen een nieuwe programmeertaal nodig had. Aan de ene kant wilde ik op hoog niveau kunnen programmeren, maar óók gebruik kunnen maken van de efficiëntie van een lagere taal. Daarom probeerde ik C uit te breiden met voorzieningen uit Simula 67, de moeder van alle objectgeoriënteerde talen."
C heeft de naam niet eenvoudig te zijn.
Stroustrup daarover: "C++ is als taal heus niet zo veel ingewikkelder dan andere talen, maar veel mensen die procedureel hebben leren programmeren, hebben moeite met de nieuwe manier van programmeren. Bovendien zijn ze inmiddels vergeten hoeveel tijd het gekost heeft om hoe dan ook een nieuwe taal te leren, om het even of dat nu C of Pascal is. Ten slotte wordt C++ vaak verkeerd onderwezen. Men begint met de lagere niveaus, ‘pointers’ en dat soort details, terwijl beginnelingen veel beter op hoog niveau kunnen beginnen en zich alleen als dat echt nodig is met de lagere niveaus moeten bemoeien."
Norm in de PC-omgeving
Over het grote succes op dit moment weet Stroustrup te melden: "In enkele jaren is C++ uitgegroeid tot een taal die vrijwel even vaak gebruikt wordt als C. Het is de norm in de PC-wereld, waar vrijwel iedereen ermee werkt. In de Unix-wereld wordt nog veel met C gewerkt; C is daarvoor ontwikkeld en een soort van traditie geworden. In ingebedde systemen, een moeilijk gebied omdat je heel efficiënt moet programmeren, wordt het nu net zoveel gebruikt als C en Assembler. Het is de aangewezen taal voor alle toepassingen waarin systeemprogramma’s gebruikt worden."
In vrijwel alle talen zijn er nu uitbreidingen voor object-georiënteerd programmeren aangebracht.
Is het succes van C++ te danken aan goede gereedschappen en bibliotheken?
Stroustrup: "Ik denk dat de belangrijkste reden de goede combinatie van programmeren op hoge en lage niveaus is. Het is een sterk generieke taal, waarvan je het gebruik kunt aanpassen aan vrijwel elk probleem. Het heeft me ongeveer vier jaar gekost voordat ik goed uit het abstractiemechanisme voor het begrip ‘container’ kwam, een universele manier om lijsten, tabellen enzovoort te definiëren. Ik heb het voorrecht gehad om rustig de tijd te kunnen nemen voor de definitie van C++." Hij legt uit dat je in de meeste talen een keuze tussen elegantie (beknoptheid, duidelijkheid en onderhoudbaarheid) en efficiëntie moet maken. Met C++ kunnen elegantie en efficiëntie gecombineerd worden – als de programmeur tenminste van wanten weet!
Internationale norm
Hoe hebt u C++ ontwikkeld? Gebeurde dat theoretisch of experimenteel? En hoe verifieerde u dat u op de juiste weg zat?
Stroustrup: "Ik heb sterk praktisch en experimenteel gewerkt. Je moet beginnen met de juiste problemen en daarvoor een goede oplossing zien te zoeken. Het vinden van de juiste problemen is het moeilijkste. Ik stelde als eis dat iedere voorziening in C++ tenminste twee praktische problemen moest oplossen. Verder experimenteer ik veel en graag met verschillende mogelijkheden. Ten slotte sta ik heel open voor feedback van vakgenoten, en die heb ik ruim gehad. Het kostte veel tijd, maar ik ben erg tevreden met het resultaat." In 1985 kwam hij met de eerste versie van C++, en de versie van 1989 ligt al vrij dicht bij de internationale norm van 1998.
Wat de toekomstige ontwikkelingen betreft, verwacht Stroustrup: "C++ is vorig jaar een officiële ISO-norm geworden. Dat houdt in dat de taal voor vijf jaar vastligt en daarna een revisie plaatsvindt. Dat wordt dus 2004. Gedurende deze tijd zullen de gereedschappen sterk verbeterd worden en zullen er veel betere bibliotheken beschikbaar komen, omdat de taal gestabiliseerd is. Het is zeker mogelijk C++ te verbeteren, maar daarvoor moeten we eerst nieuwe problemen vinden. Dat vereist nogal wat experimenten, naast de ervaringen van anderen."
Java is beperkter
Een andere, nieuwe objectgeoriënteerde programmeertaal, die nog meer in het nieuws is dan C++, is Java. Die biedt ook programmeren op hogere niveaus, en het leek er op een bepaald moment zelfs op dat Java dé voorkeurstaal van de internetwereld zou worden!
Stroustrup: "Iedereen wil altijd weten wat ik van Java vind… Het is zeker een object-georiënteerde taal, maar het is wat beperkter en specifieker dan C++. Er zitten bijvoorbeeld geen ’templates’ en concrete types in. In C++ vinden de elementaire bewerkingen doelbewust op een lager niveau plaats dan in Java, waardoor de programmeur meer vrijheid krijgt. Met C++ zijn veel meer manieren van programmeren mogelijk. Java kan natuurlijk worden uitgebreid, en daardoor zou het net zo goed kunnen worden als C++… Het belangrijkste bezwaar van Java lijkt me dat de definitie in handen is van een enkel bedrijf, niet van een internationale organisatie. Dat betekent dat er spelletjes mee gespeeld kunnen worden. Voor de ontwikkelaars van programma’s lijkt me dat geen solide basis voor de keuze van een taal."
Ontwikkelen met componenten
Een andere ontwikkeling in de computerwereld die in het nieuws is, staat bekend onder de naam component based development (cbd). "Natuurlijk wil je", aldus Stroustrup, "systemen ontwikkelen op basis van (herbruikbare) componenten. Dat is geen punt. De vraag is alleen wat definieer je als component? Dat is, net als bij de definitie van objecten, een oneindig lang durende discussie! Als Deen houd ik van dit soort filosofische discussies boven een biertje in een bar, maar je weet van te voren dat er geen praktische oplossingen voor zijn. De beste onderverdeling van een softwaresysteem in modules, is al sinds mensenheugenis in de praktijk een heikel en onoplosbaar probleem."
Kun je een component zien als een object, het onderwerp waarover u vanavond gaat spreken?
Stroustrup: "Nee hoor! Hoe gek dat ook is, ik heb componenten van driehonderdduizend regels code gezien… Ik denk dat zowel componenten als objecten het beste relatief klein gehouden kunnen worden, willen ze hergebruikt worden. Voor componenten geldt hetzelfde als voor objecten: Je zou willen dat de kosten voor het ontwikkelen in verhouding staan tot het werk dat ze doen. Daarvoor hebben we nog geen oplossing gevonden. In mijn ogen is cbd onderontwikkeld en overhypt. Maar dat geldt voor veel zaken in de computerwereld. Mensen nemen of krijgen te weinig tijd om te leren, en er is een sterke tendens om al het nieuwe te zien als dé oplossing voor alle problemen."
’s Avonds gaat Stroustrup dieper in op wat een object is en wat niet. Een vector is geen object, evenmin als gegevens, maar een uitzondering (‘exception’) is wel een object. In zijn visie moet een object verschillende toestanden (‘states’) kennen, een identiteit hebben, dynamisch gedrag vertonen, over een of meer interfaces met de buitenwereld beschikken en een klasse of type vormen. Het gebruik van objecten moet praktisch zinvol zijn, bijvoorbeeld om in een systeem dezelfde soort activiteiten slechts eenmaal te hoeven programmeren. Begrippen die onafhankelijk zijn, moeten onafhankelijk blijven, en dit liefst op het allerhoogste abstractieniveau. (Ditzelfde geldt natuurlijk ook voor componenten – HvSt). Zijn goede raad: gebruik objecten alleen als je de voordelen daarvan goed begrijpt, en alléén dan.
Decentraal of centraal
Stroustrup, goed ingevoerd op het gebied van het programmeren van grote en gedistribueerde systemen, omschrijft deze systemen zeker niet als speelgoed. "Het zijn nuttige en omvangrijke systemen. Het probleem is dat vrijwel geen systeem of opzet schaalbaar is, dat wil zeggen oneindig uitgebreid kan worden. Een centrale kan bijvoorbeeld een miljoen gesprekken aan, maar is niet uitbreidbaar naar tien miljoen of honderd miljoen. Een manier van geheugenopslag kan tien terabyte aan, maar niet honderd of duizend. Uiteindelijk is er altijd een grens! Mijn interesse is om zulke grenzen te verleggen. Dat wordt steeds interessanter omdat de menselijke verwachtingen nu zelfs sneller groeien dan de computertechnologie. Dat geldt met name op het gebied van communicatie.
In grote computersystemen is er een sterke tendens naar centralisatie, dat is mogelijk dankzij hele snelle glasvezelverbindingen. IBM, bijvoorbeeld, heeft nog maar drie computercentra voor de hele wereld! Stroustrup: "Je maakt je daarmee wel erg kwetsbaar. Bovendien gaat het in de communicatiewereld zelf over zulke grote aantallen en snelheden dat centralisatie hoe dan ook niet mogelijk is. Men gebruikt ‘server farms’ en parallelle systemen, maar die zijn zeker niet onbeperkt schaalbaar. Als je weet wat voor gigantische hoeveelheden bits per seconde geschakeld moeten worden als de glasvezelverbindingen met verschillende kleuren licht werken (dense wavelength division multiplexing) … de gigabitpijpen. Het is al moeilijk om die communicatiestromen te schakelen, laat staan dat je kunt analyseren waar er problemen ontstaan, om het verkeer te kunnen optimaliseren. Die gigabitpijpen mogen niet meer dan twee minuten per jaar uitvallen. Mede om de risico’s te spreiden, is er dus geen ontkomen aan gedistribueerde systemen."
We moeten altijd voldoende alternatieven hebben voor het geval dat een of twee onderdelen uitvallen, stelt Stroustrup. Het is dus niet alleen zaak om een systeem goed onder te verdelen in van elkaar onafhankelijke functies, maar ook om tegelijk een zodanige onderverdeling aan te brengen dat het uitvallen van één compartiment niet het gehele systeem aantast.
‘We zijn er nog niet’
Bjarne Stroustrup, nu 48 jaar, vindt dat er nog voldoende interessante onderwerpen voor de komende tijd zijn: "Over gedistribueerde systemen is nog maar weinig bekend. Daar zijn we nog lang niet uit. Ik betwijfel zelfs sterk of we daar in de komende vijftien jaar goede algemeen aanvaardbare oplossingen voor kunnen vinden. Ze stellen ons voor moeilijke problemen en daarom is het zo interessant om eraan te werken. Ik wil benadrukken dat het ontwerpen, programmeren en bouwen van systemen ongelofelijk boeiend kan zijn en dat het vinden van goede oplossingen veel bevrediging schenkt. Het is ongelofelijk wat we in de afgelopen vijftig jaar bereikt hebben, maar we zijn er nog lang niet!"
Onder het genot van een biertje praten we verder over ‘elegantie’, niet sierlijkheid, maar het klassieke ideaal van een zo zuiver en eenvoudig mogelijke vorm. In de wiskunde streeft iedereen naar een zo eenvoudig mogelijk bewijs van een stelling of definitie van een begrip. En in de informatica zou dat niet anders moeten zijn, stelt Stroustrup.
Hein van Steenis, freelance medewerker
Literatuur
B. Stroustrup: The C++ Programming Language. Addison-Wesley, 3e editie (1997), ISBN 0-201-88954-4.
Het standaardwerk over C++, de standaardbibliotheek en ontwerptechnieken.
B. Stroustrup: The Design and Evolution of C++. Addison-Wesley, 1994, ISBN 0-201-54330-3.
Over de principes, processen en beslissingen gebruikt bij het ontwerp van C++.
M.A. Ellis en B. Stroustrup: The Annotated C++ Reference Manual. Uitgave 1990, ISBN 0-201-5159-1.
http://www.research.attt.com/~bs,
Stroustrups homepage, waar meer informatie te vinden is.
CWI
Het Centrum voor Wiskunde en Informatica is het nationale onderzoeksinstituut voor wiskunde en informatica, dat in 1946 werd opgericht onder de naam Mathematisch Centrum. Het CWI doet fundamenteel onderzoek op gebieden in de wiskunde en informatica die van maatschappelijk belang zijn. Hierbij wordt samengewerkt met universiteiten, de overheid en het bedrijfsleven, zowel nationaal als internationaal. Het CWI is gevestigd aan de Kruislaan in Amsterdam.