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.

  • Communauté : Les gens sont gentils et costauds, venez faire un tour sur Reddit ou Slack ! Que ce soit par curiosité, pour se faire aider, pour avoir des code review ou juste parler :)

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