C++
Dans les années 1970, Bjarne Stroustrup découvre à Cambridge les joies et les frustrations de Simula. Ce langage lui plaît par sa capacité à structurer le code avec ses classes, mais l’exaspère par sa lenteur d’exécution. Pour sa thèse sur les systèmes distribués, il doit abandonner l’élégance de Simula et se remettre dans BCPL, plus rapide mais moins organisé. Cette contradiction le marque : pourquoi faudrait-il choisir entre performances et clarté du code ?
Quand Stroustrup rejoint les Bell Labs d’AT&T en 1979, il garde cette interrogation en tête. Les projets sur lesquels il travaille – analyse du noyau UNIX, distribution sur réseau – demandent à la fois efficacité et structure. Il se lance le pari audacieux de greffer les classes de Simula sur le langage C. Naît ainsi « C with Classes », un hybride qui conserve la rapidité du C tout en y ajoutant l’organisation orientée objet.
Les premiers pas sont modestes. Stroustrup ajoute les classes, puis les constructeurs et destructeurs pour gérer automatiquement l’initialisation et la destruction des objets. Le contrôle d’accès public-privé apparaît ensuite, suivi des fonctions virtuelles qui autorisent le polymorphisme. Chaque ajout répond à un besoin précis rencontré sur le terrain.
En 1983, Rick Mascitti suggère un nouveau nom : C++. L’opérateur d’incrémentation du C symbolise parfaitement cette évolution du langage. Le nom colle et l’histoire retiendra cette appellation. Deux ans plus tard, en 1985, la première version commerciale sort des Bell Labs, accompagnée du livre fondateur de Stroustrup, The C++ Programming Language. Le compilateur Cfront traduit le code C++ en C, solution élégante pour assurer une portabilité maximale.
Le succès arrive vite. Les programmeurs découvrent qu’ils retrouvent leurs habitudes C tout en accédant aux bénéfices de l’orienté objet. Pas de changement brutal, mais une transition en douceur. Le langage ne ralentit pas l’exécution par rapport au C, ne demande pas d’environnement spécialisé comme Smalltalk. Cette approche pragmatique séduit une communauté grandissante.
Entre 1985 et 1989, C++ s’enrichit. L’héritage multiple fait son apparition en 1989, les templates ouvrent la voie à la programmation générique, la gestion des exceptions apporte plus de robustesse. Chaque fonctionnalité mûrit d’abord dans l’usage avant d’intégrer le langage. Cette prudence forge la réputation de stabilité de C++.
La croissance est impressionnante : de quelques centaines d’utilisateurs en 1985, on passe à 400 000 en 1991. Les domaines d’application se multiplient : systèmes d’exploitation, jeux vidéo, interfaces graphiques, calcul scientifique. Des environnements de développement apparaissent, des bibliothèques spécialisées enrichissent l’écosystème.
En 1989 débute le processus de standardisation sous l’égide de l’ANSI et de l’ISO. Le travail aboutit en 1998 avec la publication du premier standard international (ISO/IEC 14882 :1998). Cette normalisation libère C++ de son créateur et assure sa pérennité au-delà des Bell Labs.
La Standard Template Library mérite une mention particulière. Alexander Stepanov y développe une approche transformatrice : des conteneurs génériques (vector, list, map) et des algorithmes réutilisables qui fonctionnent avec tous ces conteneurs. Cette bibliothèque transforme la manière d’écrire du C++ en privilégiant la réutilisation de code éprouvé.
Le système d’entrées-sorties iostream remplace avantageusement les printf et scanf hérités du C. Plus sûr au niveau des types, plus extensible, il s’intègre naturellement dans la philosophie C++. Ces ajouts à la bibliothèque standard rendent le langage plus riche sans alourdir le cœur du compilateur.
Stroustrup défend des principes constants tout au long de l’évolution : aucune dégradation des performances par rapport au C, compatibilité ascendante préservée, support de styles de programmation variés. C++ accepte la programmation procédurale classique, l’orienté objet avec classes et héritage, la programmation générique avec les templates. Cette flexibilité explique son adoption dans des contextes très divers.
Le C++ popularise l’orienté objet dans des domaines traditionnellement réservés aux langages procéduraux. Java et C# puiseront largement dans ses concepts, y compris s’ils font d’autres choix d’architecture. La programmation générique avec les templates inspire de nombreux langages ultérieurs.
C++ poursuit son évolution à travers les standards successifs. C++11 modernise le langage avec les expressions lambda et les smart pointers. C++14, C++17 et C++20 continuent d’enrichir les possibilités : modules, coroutines, concepts. Le langage s’adapte aux architectures multicœurs, aux besoins du calcul parallèle, aux contraintes de la programmation moderne.
Cette longévité tient à l’approche pragmatique de ses concepteurs. Plutôt que de révolutionner pour révolutionner, ils ont toujours privilégié l’utilité pratique et la préservation de l’existant. C++ est fidèle à ses origines : un outil puissant pour qui veut contrôler finement les ressources sans renoncer à l’expressivité du code. L’histoire de ce langage illustre comment une bonne idée, nourrie par l’expérience du terrain, traverse les décennies en s’adaptant sans perdre son identité.