|
|
|
|
|
|
14 mei 1999, nr 19, pag 39, Hein van Steenis
|
Bjarne Stroustrup: 'C++ combineert elegantie met efficiëntie'
Leer van de wiskunde!
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.
HEIN VAN STEENIS
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.
Terug
Reacties zijn welkom bij de redactie of in de discussieforums.
Zoeken in het Computable Bladarchief:
|
� 2001 |
|
|