Welcome to Bukkit France

Inscrivez-vous maintenant pour profiter d'un accès total à tout le contenu offert par la meilleur communauté Bukkit française ! Une fois inscrit et connecté, vous pourrez contribuez à la communauté en postant vos propres sujets et questions ou en répondant à ceux existants. Vous pourrez aussi customiser votre profil, recevoir des points de réputations, communiquer avec les autres membres via le chat, et plus encore! 

  • Annonces

    • Pskyco

      Bukkit France passe sous Discord !   20/02/2016

      Bukkit France est désormais passé sur Discord, au revoir donc notre vieux Teamspeak ! Téléchargez le client et venez nous rejoindre sur notre salon en suivant les instructions suivantes.
  • billets
    6
  • commentaires
    20
  • vues
    1 467

Préface : Avantages et histoire du C++

while(true);

689 vues

Note : Ce blog est une réécriture du tutoriel sur le C++ en cours que j'ai créée il y a quelques semaines. Il ne sera plus mis à jour et ce blog propose des chapitres bien plus étoffés, clairs et accessibles. Je proposerai des hors-séries à la J&JJS plus tard sur, par exemple, Arduino, des bibliothèques en particulier ou quelque chose d'intéressant lié au C++.

Le C++ est un langage de programmation fortement typé (c'est-à-dire que tous les types utilisés son connus lors de la compilation), multi-paradigmes, très populaire et multi-plateforme crée par Bjarne Stroustrup. Il appartient au domaine public et en conséquence tout le monde peut utiliser, implémenter, modifier le standard du C++ quel qu’en soit son utilisation. Il est utilisé pour une très large variété d'applications professionnelles, hobbyistes, etc.
Celui-ci hérite directement du langage C mais fournit des fonctionnalités bien plus haut niveau tout en restant rétrocompatible (en général) avec ce langage.

 

Soit - ce langage est bien plus complexe, mais il n'est pas si déroutant qu'il n'en a l'air pour un développeur Python, Java ou de n'importe quel autre langage (par contre, venant d'un développeur en assembleur, ça serait quand même plus surprenant :)). Ce tutoriel est plus orienté vers un développeur lambda qu'à un débutant voulant s'initier à la programmation (et honnêtement, commencer par du C++ lorsque l'on ne s'y connaît pas est une très mauvaise idée).

 

Il existe de nombreuses raisons de pourquoi le C++ est puissant et largement utilisé. En voici quelques exemples :

  • Les compilateurs disponibles font partie des meilleurs qui existent sur le marché et proposent des optimisations très poussées, égalant et battant la JVM dans un très grand nombre de cas.
    La compilation consiste, par définition, de "transformer" du code d'un langage X vers un langage Y. Dans le cas du C++, ce sera souvent transformer du C++ (forcément) vers du code machine.

    g++ est le compilateur le plus répandu sur le marché. Ses optimisations sont très bonnes et il est activement mis à jour. La gestion préliminaire des standards à venir est assez rapide.
    clang++ est un nouveau compilateur en vogue basé sur LLVM et développé par Apple (incroyable, hein :)) qui évolue extrêmement vite et qui commence à battre g++ au niveau de la qualité des optimisations. C'est certainement le compilateur qui propose les fonctionnalités de standards à venir le plus rapidement.
    MVSC++ est un compilateur développé par Microsoft. Il n'est pas mauvais mais ses optimisations sont bien moins poussées que pour g++, clang++ et ICC et il a beaucoup de retard par rapport aux standards. De plus, il ne fonctionne que sous Windows. Il est fortement lié à l'IDE Visual Studio également de Microsoft.
    ICC est un compilateur développé par Intel. La capacité de ses optimisations devançait de loin celles de g++ et clang++, mais l'écart tend à se marginaliser, même si il demeure dans certains cas (vectorisation/parallélisation) nettement supérieur aux compilateurs cités précédemment.
     
  • Parce que le C++ est multi-paradigmes, une seule "méthode" de programmation n'est pas imposée ou sur-utilisée (pas comme le Java par exemple avec la POO) : Il est aussi bien orienté objet que générique ou fonctionnel.
     
  • La POO reste néanmoins un concept très puissant en C++. En effet, elle propose l'héritage multiple, l'héritage virtuel (qui permet de gérer les cas complexes comme l'héritage en diamant), le polymorphisme (évidemment), ...
     
  • Le langage est fortement typé. Bien que son statut de qualité puisse être mis en débat, cette capacité est très utile pour, de un, permettre la compilation (et avec toutes les optimisations qui vont avec), et de deux, pour une plus grande clarté du code ('1' + 1 est bel est bien fonctionnel en javascript, ce qui n'est pas vraiment prévisible)
     
  • La gestion de la mémoire est "manuelle", ce qui permet de s'abstenir d'un Garbage Collector (bien que cela reste possible d'en implémenter un; le C++ par nature le permet et le C++11 l'a encore facilité - il existe déjà des bibliothèques pour y parvenir); exit donc une charge ajoutée lors de l'exécution, et l'on peut prédire lorsqu'un objet sera détruit.
    Une variable allouée statiquement (c'est-à-dire sans utilisation de new et de malloc) a une durée de vie précise (ce qui permet l'utilisation de l'idiome RAII de manière précise) tandis qu'une variable allouée dynamiquement avec new (et d'où on récupère un pointeur cru, *) ne sera jamais libérée sauf si l'on utilise delete.
    Mais les pointeurs intelligents du C++11 permettent de simplifier la gestion de la mémoire dynamique pour éviter les fuites de mémoire. En effet, ils permettent de gérer un pointeur C intelligemment pour, à quasi coup sûr, empêcher les memory leak et contrer très efficacement le manque de GC.
     
  • Bien que des benchmark mettent des fois nez-à-nez les performances de la JVM et du C++ (ou font largement gagner la JVM en ayant bien pensé à saboter les résultats en désactivant les optimisations pour le C++), le C++ ne fait pas l'objet (jeu de mot non voulu) d'une abstraction excessive ce qui permet de réaliser des optimisations impossibles dans des langages (très) haut niveau ce qui place le C++ souvent bien au dessus de Java et de quasiment tous les autres langages en conditions réelles pour peu qu'on optimise son code.
     
  • Le standard du C++ est en constante évolution. Le C++17 (ou C++1z) est en préparation, et la dernière révision majeure, le C++11 (dont j'ai bien venté les mérites ici ;)), a permis d'améliorer encore plus le langage et d'étoffer la bibliothèque standard - pour citer Bjarne Stroustrup, "Surprisingly, C++11 feels like a new language".
    Avantage non-négligeable, de plus, la plupart des compilateurs modernes permettent le choix du standard avec l'argument -std (-std=c++11, std=c++14, std=c++1z...) ce qui permet d'avoir les bénéfices d'un compilateur complètement à jour sans avoir à modifier son code si de (très) rares modifications du standard forçaient à changer quelques lignes de code.
     
  • Le C++ est largement multi-plateforme : Il existe bien sûr des compilateurs pour le x86 (certainement l'architecture de ce sous quoi tourne votre machine), mais également pour ARM (téléphones, télévisions, raspberry pi, de nombreuses consoles de jeu surtout portables...), AVR (Arduino Uno) et encore d'autres (PowerPC - Gamecube, Wii, Wii U, PS3 et Xbox 360; SPARC), mais même du JavaScript utilisable pour du web avec emscripten!
     
  • Les utilisations du C++ sont diverses est variées. Bien sûr, on peut créer des applications pour bureau (avec pour bibliothèque de GUI GTK+, Qt, ...), mais aussi pour téléphone, pour en partie le front-end ET back-end web (emscripten, CppCMS), de l'embarqué (Arduino et diverses autres microcontrôleurs)
     
  • Bien que plus minimaliste que celle du Java par exemple, la bibliothèque standard du C++ est très rigoureusement gérée par des développeurs expérimentés et les fonctionnalités sont retournées de toutes les manières avant d'être votées par les comités du C++ et d'être intégrées.


Je vous ai mis l'eau à la bouche? Alors continuons!

 

Sommaire :


6 personnes aiment ça


4 Commentaires


Bon quelques petits trucs:

clang (clang++ ?) est aujourd'hui plus développé par la commu que par apple

MVSC(MVSC++ ?) produit de meilleurs optimisations sous windows que mingw donc pour un executable sous windows il vaut mieux utiliser MVSC

 

Et il y aussi quelques petit mauvais point sur le c++:

La lib standart est limitée (Pas de socket multi-platforme(normalement prevu pour c++11 , mais reportée , donc ce probleme tend a ce resoudre avec les revisions du language mais quand meme) , ce qui nous oriente vers l'utilisation de librairie comme Boost par exemple ce qui peux rebutter certains novices

...

 

Et je pense que ce serai pas mal de parler de valgrind qui sert quand meme beaucoups

 

Mais sinon très bon petit tour et historique du c++ Bravo !

Partager ce commentaire


Lien vers le commentaire
Partager sur d’autres sites

C'est vrai, mais clang++ reste initié par Apple et il a pas mal évolué grâce à eux. Mais oui maintenant le gros est fait de la communauté.
Et d'expérience MVSC++ fait de moins bonnes opti que g++ mais c'est à vérifier...

La lib standard est bien plus minimaliste que celle du Java c'est sûr. Il me semble que le networking fera part de c++1z ou d'un standard à venir.

1 personne aime ça

Partager ce commentaire


Lien vers le commentaire
Partager sur d’autres sites

C'est vrai, mais clang++ reste initié par Apple et il a pas mal évolué grâce à eux. Mais oui maintenant le gros est fait de la communauté.

Et d'expérience MVSC++ fait de moins bonnes opti que g++ mais c'est à vérifier...

La lib standard est bien plus minimaliste que celle du Java c'est sûr. Il me semble que le networking fera part de c++1z ou d'un standard à venir.

Oui normalement mais c'etais prevu a l'origine pour c++11 dommage ...

 

Et juste une question pourquoi tu appelle clang , clang++ et MVSC , MVSC++ x) ?

Partager ce commentaire


Lien vers le commentaire
Partager sur d’autres sites

 

C'est vrai, mais clang++ reste initié par Apple et il a pas mal évolué grâce à eux. Mais oui maintenant le gros est fait de la communauté.

Et d'expérience MVSC++ fait de moins bonnes opti que g++ mais c'est à vérifier...

La lib standard est bien plus minimaliste que celle du Java c'est sûr. Il me semble que le networking fera part de c++1z ou d'un standard à venir.

Oui normalement mais c'etais prevu a l'origine pour c++11 dommage ...

 

Et juste une question pourquoi tu appelle clang , clang++ et MVSC , MVSC++ x) ?

 

clang = compilateur C

MVSC = compilateur C

clang++ = compilateur C++

MVSC++ = compilateur C++

Même si en général les termes sans ++ désignent le compilateur C et C++ à la fois

1 personne aime ça

Partager ce commentaire


Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant