Introduction - Pourquoi le C++
Avantages
Performances : On est très proche de la machine. L'introduction concernant les performances évoque les raisons pour lesquelles on souhaiterait de meilleures performances.
Temps réel (pas synonyme de performances) : Le C++ permet d'assurer de façon déterministe le temps d'exécution d'une fonction ou d'un programme (alors qu'un garbage collector pourrait ralentir le programme au mauvais moment par exemple).
En grande partie compatible avec le C (norme 1999), ce qui permet d'utiliser des librairies en C ou d'exporter facilement du code utilisable en C.
Pas de runtime : Le programme ne dépend pas d'un environnement dédié comme la JVM (pour Java). Il peut donc s'exporter dans ces autres langages alors que l'inverse n'est pas possible.
Destructeurs et moves : Ils permettent ensemble d'avoir une gestion automatique et déterministe des ressources (mémoire, fichiers, connexions, ...), sans surcoût pour la majorité des cas.
Value semantics : Stocker et passer des objets par valeur permet de voir qui possède quoi, d'éviter les références nulles, de copier des objets de façon triviale, et de propager l'immutabilité (via const).
Templates : Permet d'exécuter du code à la compilation, et de détecter des d'erreurs à la compilation (meilleures abstractions, plus de sécurité et de performances).
Contenu : De nombreuses librairies en C++ sont disponibles, et de haute qualité. Le C++ est très rétro-compatible, donc du vieux code peut toujours fonctionner.
Désavantages
Unsafe : Le langage vous permet de faire n'importe quoi ... Comme des fuites ou corruptions de mémoire.
Compliqué : Il existe plusieurs façons de faire (à peu près) les mêmes choses, et le langage est immense.
Dur à parser : Les outils manipulant le C++ (comme les IDE) seront plus lents et moins précis que ceux d'autres langages. Les erreurs de compilation peuvent être compliquées à comprendre.
Package managers : Les solutions émergent (Conan, Vcpkg) mais ne sont pas aussi complètes et/ou simples d'utilisations que les package managers d'autres langages (npm, pip, ....)
Systèmes de build : La gestion des dépendences et obtenir du cross-platform ou cross-compiler peut devenir très compliqué. L'outil le plus utilisé actuellement est CMake.
Solutions
Passer du temps pour apprendre le langage.
Pratiquer pour être à l'aise, productif et éviter les erreurs courantes.
Passer du temps pour développer une bonne toolchain (IDE, intégration continue, imports et exports de librairies, vérification de code, ...).
Last updated