Aller au contenu principal
Bethemesh
BiographieHistoire de l’informatique

Bjarne Stroustrup : concevoir C++ sans renoncer aux performances

Comment Bjarne Stroustrup a fait évoluer C with Classes vers C++, un langage conciliant abstraction, compatibilité et maîtrise des ressources.

Publié le 10 août 2026Lecture : 7 minPar Équipe Bethemesh
Débutant
Portrait de Bjarne Stroustrup, concepteur du langage C++
Afficher le sommaire
  1. Le problème des grands programmes efficaces
  2. De « C with Classes » à C++
  3. L’abstraction sans coût imposé
  4. De la bibliothèque à un langage multiparadigme
  5. Standardiser un langage vivant
  6. Ce que C++ permet — et ce qu’il exige
  7. Pourquoi Bjarne Stroustrup compte encore
  8. Chronologie
  9. Questions fréquentes
  10. Bjarne Stroustrup a-t-il créé C++ seul ?
  11. Pourquoi C++ porte-t-il ce nom ?
  12. C++ est-il seulement un langage orienté objet ?
  13. C++ est-il compatible avec C ?
  14. Pourquoi C++ reste-t-il difficile à apprendre ?
  15. Dans quels domaines C++ reste-t-il pertinent ?

Bjarne Stroustrup n’a pas conçu C++ pour remplacer le langage C par une théorie plus élégante. Il cherchait un outil capable de décrire de grands systèmes sans perdre le contrôle des performances, de la mémoire et du matériel.

Cette tension définit C++ depuis ses débuts : offrir des abstractions de haut niveau tout en restant utilisable là où chaque ressource compte. Elle explique à la fois sa longévité, sa puissance et sa réputation de langage complexe.

Le problème des grands programmes efficaces

Bjarne Stroustrup naît en 1950 à Aarhus, au Danemark. Il étudie les mathématiques et l’informatique à l’université d’Aarhus, puis prépare un doctorat à Cambridge sur les systèmes distribués.

Pendant ce travail, il utilise Simula, langage pionnier des classes et de la programmation orientée objet. Les abstractions de Simula l’aident à représenter les composants d’un système, mais les outils disponibles ne fournissent pas les performances attendues. Pour une expérience suivante, il se tourne vers BCPL, plus proche de la machine, mais constate que la perte d’abstraction rend le programme difficile à organiser.

Cette expérience lui donne une direction : combiner les mécanismes de structuration de Simula avec le modèle de compilation et l’efficacité de C.

De « C with Classes » à C++

Stroustrup rejoint les Bell Labs en 1979. Il y commence C with Classes, une extension de C dotée de classes, de constructeurs, de destructeurs, de contrôle d’accès et de vérification renforcée des types. Les premières versions sont transformées en C par un préprocesseur nommé Cfront, puis compilées avec les outils existants.

Le choix d’étendre C est pragmatique. Les Bell Labs disposent déjà de systèmes, de bibliothèques et de programmeurs formés à ce langage. La compatibilité facilite l’expérimentation et l’adoption. Elle transmet aussi à C++ plusieurs traits difficiles à simplifier par la suite : syntaxe dense, conversions implicites et gestion directe de la mémoire.

En 1983, le langage prend le nom C++, référence à l’opérateur d’incrément de C. Les fonctions virtuelles permettent le polymorphisme dynamique, tandis que la surcharge d’opérateurs aide les types définis par les utilisateurs à se comporter comme des types intégrés. La première édition de The C++ Programming Language paraît en 1985.

L’abstraction sans coût imposé

L’idée centrale de Stroustrup n’est pas que tout programme doit être orienté objet. C++ est progressivement devenu multiparadigme : programmation procédurale, classes, programmation générique, fonctions et calcul à la compilation peuvent coexister.

Son principe d’« abstraction sans surcoût » se comprend en deux règles. Les fonctionnalités inutilisées ne doivent pas coûter de temps ou de mémoire. Lorsqu’une abstraction est utilisée, son implantation doit pouvoir rivaliser avec un code spécialisé écrit à la main. Ce n’est pas une promesse automatique : une mauvaise conception peut rester lente. Le langage cherche plutôt à donner aux bibliothèques les moyens de proposer des abstractions efficaces.

Les templates illustrent ce projet. Ils permettent d’écrire un algorithme pour une famille de types, le compilateur produisant les versions nécessaires. La Standard Template Library, intégrée à la bibliothèque standard, associe conteneurs, itérateurs et algorithmes sans imposer une hiérarchie de classes commune.

C++ développe aussi un modèle déterministe des ressources. Un objet peut acquérir une ressource dans son constructeur et la libérer dans son destructeur. Cette technique, connue sous le nom de RAII, ne concerne pas seulement la mémoire : fichiers, verrous et connexions peuvent suivre la durée de vie d’un objet. Les pointeurs intelligents modernes rendent ce modèle plus sûr sans supprimer la possibilité d’un contrôle bas niveau.

De la bibliothèque à un langage multiparadigme

Un langage ne devient réellement utilisable à grande échelle que lorsque ses abstractions peuvent être partagées sous forme de bibliothèques. Au début de C++, les classes servent surtout à représenter des objets et à protéger leur état. Les templates élargissent ensuite cette ambition : ils permettent de décrire des familles d’algorithmes et de structures de données sans fixer à l’avance le type manipulé.

Le travail d’Alexander Stepanov et de Meng Lee sur la Standard Template Library joue ici un rôle décisif. La STL n’est pas conçue comme une hiérarchie d’objets. Elle sépare les conteneurs, les algorithmes et les itérateurs, qui servent d’interface entre eux. Un même algorithme de tri peut ainsi fonctionner avec plusieurs représentations de données, sans dépendre d’une classe de base commune.

Son intégration à la bibliothèque standard dans les années 1990 confirme que C++ ne se réduit plus à « C avec des classes ». La programmation générique devient l’un de ses axes majeurs. Plus tard, les concepts cherchent à exprimer explicitement les exigences imposées aux paramètres d’un template, afin de rendre les interfaces et les erreurs de compilation plus compréhensibles.

Cette évolution illustre la manière de travailler de Stroustrup. Il ne cherche pas à imposer un paradigme unique : il veut permettre à l’utilisateur de choisir l’abstraction adaptée, puis au compilateur d’en éliminer autant que possible le coût d’exécution.

Standardiser un langage vivant

À mesure que plusieurs compilateurs apparaissent, une définition commune devient indispensable. Le premier standard ISO de C++ est publié en 1998. La normalisation transforme le langage en œuvre collective : Stroustrup conserve une influence importante, mais les évolutions sont discutées et votées par un comité international.

C++11 marque une modernisation majeure avec les déplacements d’objets, les expressions lambda, les outils de concurrence et de nombreuses améliorations de bibliothèque. Les éditions suivantes adoptent un rythme régulier et ajoutent notamment concepts, modules, plages et coroutines.

Cette accumulation répond à des besoins réels, mais elle a un coût pédagogique. Plusieurs styles historiques coexistent, et du code correct selon une ancienne pratique peut ne plus représenter la manière la plus sûre d’écrire du C++ moderne. La compatibilité protège des investissements logiciels considérables ; elle limite en retour la possibilité de repartir d’une page blanche.

Ce que C++ permet — et ce qu’il exige

C++ est employé lorsque les performances, la latence ou l’accès au matériel comptent : moteurs de jeu, navigateurs, bases de données, outils de création, systèmes embarqués et infrastructures financières. Il permet de construire des abstractions riches sans interdire le contrôle précis de la représentation des données.

Cette liberté transfère une responsabilité importante au programmeur. Les accès mémoire invalides, comportements indéfinis et erreurs de durée de vie restent possibles. Les recommandations modernes privilégient les conteneurs, les objets possédant leurs ressources, les contrôles statiques et les bibliothèques éprouvées plutôt qu’un recours systématique aux pointeurs nus.

Comparer C++ à Java ou Python revient donc moins à désigner un vainqueur qu’à comparer des contrats. Java confie davantage de décisions à une machine virtuelle ; Python privilégie une boucle de développement très directe ; C++ expose plus largement les coûts et les choix de représentation.

Pourquoi Bjarne Stroustrup compte encore

Stroustrup a montré qu’une abstraction n’est pas nécessairement l’ennemie de l’efficacité. Cette idée influence C++ mais aussi la conception de langages plus récents, qui cherchent eux aussi à rendre les garanties et les coûts visibles.

Son héritage comprend également une leçon moins confortable : un langage adopté pendant des décennies devient une infrastructure sociale autant que technique. Le faire évoluer exige de concilier innovation, sécurité, outils, enseignement et milliards de lignes existantes.

Chronologie

  • 1950 : naissance de Bjarne Stroustrup à Aarhus, au Danemark.
  • 1975 : diplôme de l’université d’Aarhus.
  • 1979 : doctorat à Cambridge et arrivée aux Bell Labs.
  • 1979 : début du travail sur C with Classes.
  • 1983 : adoption du nom C++.
  • 1985 : première édition de The C++ Programming Language.
  • 1989 : publication de C++ 2.0.
  • 1990 : parution de The Annotated C++ Reference Manual.
  • 1998 : premier standard international de C++.
  • 2011 : publication de C++11, étape majeure du C++ moderne.
  • 2014–2023 : nouveaux standards selon un rythme approximativement triennal.
  • Aujourd’hui : Stroustrup poursuit ses travaux sur la conception, l’enseignement et la sûreté de C++.

Questions fréquentes

Bjarne Stroustrup a-t-il créé C++ seul ?

Il a lancé et dirigé sa conception initiale. Le langage est ensuite devenu le produit de compilateurs, de bibliothèques, d’utilisateurs et d’un comité ISO international.

Pourquoi C++ porte-t-il ce nom ?

En C, l’opérateur ++ incrémente une valeur. Le nom suggère donc un C « augmenté », sans prétendre qu’il s’agit simplement d’une version officielle suivante de C.

C++ est-il seulement un langage orienté objet ?

Non. Il prend en charge les styles procédural, orienté objet, générique et fonctionnel. Stroustrup le décrit comme un langage multiparadigme.

C++ est-il compatible avec C ?

Une grande quantité de code C peut être adaptée ou compilée en C++, mais les langages ne sont pas entièrement compatibles. Chacun possède ses propres normes et certaines constructions valides dans l’un ne le sont pas dans l’autre.

Pourquoi C++ reste-t-il difficile à apprendre ?

Il combine plusieurs paradigmes, conserve de nombreux choix historiques et laisse au programmeur un contrôle étendu. L’apprentissage gagne à commencer par les pratiques modernes plutôt que par la gestion manuelle systématique de la mémoire.

Dans quels domaines C++ reste-t-il pertinent ?

Dans les logiciels où performance, latence, empreinte mémoire ou intégration matérielle sont décisives : jeux, navigateurs, bases de données, calcul scientifique, embarqué et infrastructures.

Sources et références

  1. 1.Bjarne Stroustrup --- A History of C++: 1979--1991
  2. 2.Bjarne Stroustrup --- The Design and Evolution of C++
  3. 3.ISO C++ Foundation --- The C++ Standard
  4. 4.Computer History Museum --- Bjarne Stroustrup oral history

Collection

Langages de programmation

  1. 01Grace Hopper : des premiers compilateurs à COBOL
  2. 02John Backus : FORTRAN, la notation BNF et le refus du code machine
  3. 03Dennis Ritchie : le langage C au cœur d'Unix
  4. 04FORTRAN : prouver qu'un compilateur peut rivaliser avec l'assembleur
  5. 05Le langage C : rendre les systèmes portables sans masquer la machine
  6. 06Niklaus Wirth : de Pascal à Oberon, concevoir par la simplicité
  7. 07Bjarne Stroustrup : concevoir C++ sans renoncer aux performances
  8. 08Pascal : apprendre à programmer en rendant la structure visible
  9. 09C++ : de C with Classes à un langage généraliste
  10. 10La programmation orientée objet : objets, messages et abstractions réutilisables
  11. 11Guido van Rossum : créer Python pour rendre le code lisible
  12. 12Brendan Eich : JavaScript, du prototype de Netscape au standard du Web
  13. 13James Gosling : l'ingénieur à l'origine de Java
  14. 14Python : la lisibilité, les batteries incluses et un écosystème mondial
  15. 15Java : écrire une fois, exécuter partout
  16. 16JavaScript : le langage qui a rendu le Web interactif
  17. 17Ken Thompson : d’Unix au langage Go, la simplicité comme méthode
  18. 18John McCarthy : Lisp et l’idée de programmer avec des symboles
  19. 19Alan Kay : Smalltalk et l’ordinateur comme média personnel
  20. 20Barbara Liskov : l'abstraction qui a rendu le logiciel modulaire
  21. 21Robin Milner : ML, la preuve assistée et les langages de l’interaction
  22. 22Brian Kernighan : AWK, Unix et l'art d'expliquer le code
  23. 23Anders Hejlsberg : de Turbo Pascal à C# et TypeScript
  24. 24Larry Wall : Perl, le langage qui a relié les outils d'Internet
  25. 25Yukihiro Matsumoto : Ruby et le bonheur du programmeur
  26. 26Rasmus Lerdorf : PHP et la démocratisation du Web dynamique
BiographieHistoire de l’informatiqueDébutant

Dennis Ritchie : le langage C au cœur d'Unix

Comment Dennis Ritchie a conçu le langage C et contribué à Unix, deux fondations qui ont rendu les logiciels système plus portables.

3 août 20268 minLire
BiographieHistoire de l’informatiqueDébutant

James Gosling : l'ingénieur à l'origine de Java

Comment James Gosling et l'équipe Green de Sun ont conçu Java : d'Oak aux machines virtuelles, de la portabilité promise à l'héritage du langage.

17 août 20268 minLire

Cet article vous a-t-il été utile ?