Les avantages d'apprendre le C++ en 2024 pour des applications performantes

Qu'est-ce que le C++ ?

Le C++ est un langage de Programmation Orienté Objet (ou POO).

Ce langage permet de créer de nombreux outils :

  • applications de bureau, ou logiciels, ou encore clients lourds
  • applications mobiles
  • navigateurs web
  • jeux vidéos
  • voir même des systèmes d'exploitation

Pour information, certains composants de Windows 10, de MacOS, et de Linux sont écrits en C++.

Exemple de code C++

#include <iostream>

int main() {
    std::cout << "Hello World!";
    return 0;
}

Histoire du C++

Le C++ est un descendant d'un langage plus ancien : le C. Le C a été créé dans les laboratoires Bell au début des années 1970. C'est dans ces laboratoires que Bjarne Stroustrup, le futur créateur du C++, rencontrera Dennis Ritchie, le créateur du C.

Bjarne aima le C, le considérant rapide, portable et applicable à de nombreux usages. Il a donc décidé de l'améliorer. Une première version sortira au début des années 80. Cette version s'appelera C with classes, ou dans la langue de Molière C avec des classes. Comme son nom l'indique, cette version intégra les propriétés de la programmation orientée objet.

Ce n'est qu'en 1984 que le nom C++ verra le jour.

L'opérateur ++ dans la majorité des langages de programmation permet d'incrémenter une valeur de 1. C'est donc avec un peu d'humour que le nom C++ a été défini, indiquant que le C++ est un C amélioré.

Historique des versions

Plusieurs versions de C++ verront ensuite le jour :

  • C++ 2.0 en 1989
  • C++98 en 1998
  • C++03 en 2003
  • C++11 en 2011
  • C++14 en 2014
  • C++17 en 2017
  • et...C++20 à la fin de l'année 2020

C'est la norme ISO/IEC 14882:2020 qui encadre cette nouvelle version.

Le C++23 est en préparation à ce jour.

Un langage compilé

Le C++ est un langage compilé, et c'est là une grande force.

Qu'on se le dise : nos machines ne savent pas lire le code que nous écrivons. Il faut un traducteur pour que les mots se transforment en commandes. Cette transformation n'a pas lieu au même moment dans un langage compilé et interprété.

Dans un langage compilé, le code source et d'abord transformé par un compilateur. Le compilateur générera un fichier binaire, lisible par nos machines. Lors de la diffusion d'une application, le développeur fournit un fichier exécutable, un binaire, lisible directement par les machines des utilisateurs.

Dans un langage interprété, le code est lu et transformé en langage machine au moment de l'exécution. De ce fait, le temps d'exécution peut s'en trouver allongé, car il doit inclure le temps de traduction en langage machine.

Les bibliothèques

Au cours des dernières décennies, des générations de développeurs ont développés des bibliothèques, ou framework (c'est à dire un ensemble de composants logiciels) pour le langage C++. Cette richesse de bibliothèque contribue à la popularité du langage. 

Certaines des bibliothèques embarquent des fonctionnalités inexistantes dans le langage.

Pour exemple, le C++ n'embarque pas de type de donnée pour manipuler des chaines de caractères (string en anglais), là où bon nombre de langages le prennent en charge nativement. Heureusement des librairies peuvent être intégrées à notre projet pour combler ce manque.

Voici quelques unes des libraires les plus connues en C++ :

Forces et faiblesse

Malheureusement, le C++ n'est pas parfait. Toutefois, une bonne connaissance de ses forces et faiblesses vous permettra de prendre de bonnes décisions quant à l'architecture de votre prochain projet.

Etant un langage compilé, et fortement typé, c'est un langage performant. La notion de classe qui le différencie du C rend le code source plus flexible et mieux organisé. A la différence d'autres langages, il permet de manipuler directement la mémoire vive de la machine qui exécute le programme. Il peut également accéder aux entrées/sortie de votre ordinateur. Il est notamment utilisé pour programmer des cartes électroniques. Enfin, l'expérience commune acquise au cours des années le rend riche.

Toutefois, certaines de ses forces sont aussi ses faiblesses :

  • Les bonnes performances se basent sur une bonne gestion de la mémoire. Mais une mauvaise programmation peut conduire à des crashs de l'application.
  • La courbe d'apprentissage peut être plus faible sur du C++ que sur d'autres langages en raison de sa complexité. Mais pas de tracas, ce cours saura vous accompagner !
  • Le C++ semble parfois rigide... Il demande donc de la rigueur lors de la conception de votre application.
  • Chaque plateforme possèdera son propre exécutable, là où le même code peut être exécuté sur de nombreuses plateformes pour d'autres langages (coucou Java !).

Popularité du C++

Malgré son grand âge, C++ reste un langage populaire auprès des développeurs et des entreprises ; votre lecture de ces quelques lignes en est la preuve.

Selon l'index TIOBE, en Septembre 2023, C++ occupait la 3ème place du classement des langages les plus populaires.

Tout est une question de langage

Parler une langue étrangère

Nous autres, humains, parlons différentes langues. Il est parfois difficile de se comprendre si personne ne nous traduit un langage qui nous est étranger. Toutefois, il existe différents outils qui permettent d'assurer une communication avec un individu qui parle une langue différente de la notre :

  • un ami bilingue, qui saura jouer le rôle d'interprète
  • des outils de traductions en ligne (DeepL, Google Traduction, ...)
  • (parler avec les mains)

Il en va de même avec nos processeurs, mémoires vives et autres composants informatiques. Ils ne parlent pas la même langue que nous. Pour autant, il nous faut nous comprendre pour leur demander d'exécuter des instructions pour nous.

C++ - un langage intermédiaire

Comme nous l'avons compris, nous avons besoin d'intermédiaire. Apprendre à parler directement en langage machine est presque impossible.

Les premiers développeurs ont inventé le langage assembleur, qui est un langage bas niveau. Ca signifie qu'il agit directement sur la mémoire et sur les périphériques de nos machines. Toutefois, il reste difficile d'apprentissage et lourd à écrire.

C'est pourquoi le C++ est un bon intermédiaire. Il est plus facile de l'apprendre, de l'écrire. Par ailleurs, c'est un langage qui contient des standards, une syntaxe plus facilement traduisible par le compilateur.

Ainsi, pour effectuer une addition, en français, nous dirions :

Initie une variable v qui vaut 4 et ajoute lui 3

En C++, l'équivalent est :

int v = 4;
v = v +3;

En assembleur, l'équivalent est :

movl	$4, -4(%rbp)
addl	$3, -4(%rbp)
movl	$0, %eax
addq	$48, %rsp
popq	%rbp

Nous comprenons donc l'intérêt du C++, qui va jouer un rôle intermédiaire entre l'humain et la machine.

Du code source à l'exécutable

Pour traduire un fichier source en exécutable, différents outils sont nécessaires :

  1. Le préprocesseur C++
  2. Le compilateur
  3. L'assembleur
  4. Le linker

1. Le préprocesseur

Le rôle du préprocesseur est d'enrichir un fichier source de tous les éléments qui le composent

  1. Dans cet exemple, le préprocesseur incluera dans le fichier source "amélioré", le contenu des 2 fichiers d'en-tête iostream et monfichier.h.
  2. Il remplacera toutes les occurrences de PI et de CARRE par leur définition
  3. Il définira s'il est en mode DEBUG ou non, et conservera uniquement la partie qui s'applique
  4. Il supprimera les commentaires

2. Le compilateur

Le compilateur transformera le code C++ en langage assembleur. Un fichier assembleur sera généré par fichier source.

3. L'assembleur

L'assembleur transformera le code assembleur en fichier objet. Dès cette étape, le fichier n'est plus lisible avec un éditeur de texte. Un fichier objet sera généré par fichier source.

4. Le linker

Le linker, comme son nom l'indique, va lier l'ensemble des fichiers objets pour générer un fichier exécutable unique. Il va également intégrer dans l'exécutable les différents fichiers objets d'éventuelles librairies ajoutées au projet.

Pour en savoir plus commencez notre formation très complète sur C++ !