Bjarne Stroustrup - L'Essence du C++ : avec des exemples en C++84, C++98, C++11, et C++14
GoingNative 2013
La conf�rence de B. Stroustrup lors des GoingNative 2013 est maintenant disponible en rediffusion :
Voici un r�sum� qui ne contient volontairement pas tous les �l�ments de la conf�rence, mais seulement ceux qui m'ont paru importants et/ou int�ressants.
Ce qu'il voulait/veut pour le C++ :
- S�curit� des types : on encapsule les op�rations dangereuses mais n�cessaires ;
- S�curit� des ressources* ;
- Performance : c'est important pour la grande majorit� des syst�mes ;
- Pr�visibilit� : un code pr�visible est un code sur lequel on peut compter ;
- Enseignabilit� : la complexit� du code devrait �tre proportionnelle � la difficult� de la t�che, "garder les choses simples simples";
- Lisibilit� : les hommes autant que les machines doivent pouvoir analyser le code.
*Une ressource est quelque chose qu'il vous faut acqu�rir, utiliser, puis lib�rer. Par exemple une mutex, un fichier, une socket, et bien entendu de la m�moire.
Le C++ est d�finitivement expert-friendly, mais pas seulement expert-friendly. Il doit �tre accessible aux d�butants.
Qu'offre le C++ ?
- Pas la perfection : celui qui vous d�crit un langage comme parfait est soit un commer�ant, soit un fou, soit les deux ;
- Pas tout pour tout le monde ;
- Un mod�le fondamental solide ;
- 30+ ans d'affinage dans des conditions r�elles : �a marche et on connait ses d�fauts, si on se jette sur des langages tout neufs qui ont l'air parfaits, c'est en r�alit� que l'on n'a pas encore eu le temps de trouver leurs d�fauts ;
- Des performances
- De la stabilit� sur le long terme, oui, c'est une v�ritable fonctionnalit� qui permet d'�conomiser du temps et de l'argent.
Si vous comprenez int et vector, vous comprenez le C++. Le reste n'est que "d�tails" (1300+ pages de d�tails toutefois).
Le C++ en 4 slides :
- Il se colle directement au hardware : vous avez des valeurs avec leurs op�rations primitives, et des objets qui peuvent �tre compos�s par simple concat�nation ;
- Des classes qui ont un constructeur et un destructeur : "Un constructeur �tablit l'environnement dans lequel les membres vont s'ex�cuter ; le destructeur annule cette action." ;
- Des classes abstraites et de l'h�ritage : on propose � l'utilisateur uniquement une interface et on l'�loigne de l'impl�mentation ;
- Des types et des classes param�tr�s : les templates, qui permettent � la fois la programmation g�n�rique et le calcul compile-time.
Ce qui n'est pas du C++ :
- Pas de Garbage Collector : non n�cessaire et tueur de performances ;
- Pas de s�curit� de type garantie pour toutes les constructions, on reste proche du mat�riel et on veut pouvoir l'exploiter ;
- Pas de machine virtuelle, bien qu'il soit possible d'ex�cuter du code C++ sur une machine virtuelle si on le souhaite ;
- Pas de gigantesque biblioth�que "standard" : pas d'autorit� centrale pour accepter/rejeter/aider l'int�gration de biblioth�ques ;
- Pas de standard pour les graphiques/GUI, le XML, le web, ...
Programmation g�n�rique : les Templates
1980 : utilisation des macros pour exprimer des types et des fonctions g�n�riques.
1987 (et actuellement) on recherche quelque chose qui soit :
- Etr�mement g�n�ral/flexible : "doit �tre capable de faire bien plus que ce que je peux imaginer" ;
- Zero-overhead : vector et Matrix doivent �tre capable de rivaliser avec les tableaux du C ;
- Des interfaces bien sp�cifi�es : surcharge implicite, de bons messages d'erreur, et pourquoi pas de la compilation s�par�e.
Deux sur trois, ce n'est pas si mal... mais ce n'est pas � la hauteur de ses attentes, aussi a-t-il continu� d'y travailler pendant plus de 20 ans.
Les templates utilisent du duck typing en compile-time.
De l� vient le probl�me des messages d'erreur d'une longueur abominable, et d'une difficult� de compr�hension tout aussi abominable.
Les templates n'ont pas d'interface claire, la d�tection d'erreur se fait bien trop tard, les utilisateurs d�pendent sur les d�tails d'impl�mentation et il ne ressemblent en rien aux autres parties du langage, ce qui engendre des probl�mes de maintenance et d'enseignement.
En C++98 on �crit ceci :
Avec les concepts-lite de C++14, on �crira ceci :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10 template<typename C> void sort(C& container); std::vector<int> vs; std::list<int> ls; sort(vs);//ok sort(ls);/*insérer ici votre liste préférée (50+ messages de préférence) de détails d'implémentations templates qui vous expliquent qu'une ligne obscure n'est pas compilable*/
Et en activant une option du compilateur, il vous dira tr�s clairement que std::list n'est pas Sortable parce qu'il n'est pas Random_Access parce qu'il ne trouve pas d'operator[].
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7 void sort(Sortable& container); std::vector<int> vs; std::list<int> ls; sort(vs);//ok sort(ls);//error: 'std::list<int>' does not satisfy the constraint 'Sortable'
B. Stroustrup expose durant sa conf�rence les d�tails des r�gles (plut�t simples) qui permettent d'�crire des concepts.
"Je n'aime pas le mot 'Paradigmes'"
La plupart des distinctions entre la POO, la programmation g�n�rique, et la "programmation conventionnelle" est une illusion :
- due � la focalisation sur des fonctionnalit�s particuli�res du langage ;
- un paradigme seul ne peut �tre complet ;
- cela limite les programmeurs, les for�ant � faire du mauvais code et des workarounds.
Ce sont seulement diff�rents aspects que vous pouvez utiliser en combinaison et exprimer du code autrement qu'en termes de paradigmes qui peuvent devenir de stupides religions.
S'agit-il de POO, PG, ou conventionnel ?
R�ponse : les trois � la fois.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5 void draw_all(Container& c) requires Same_type<Value_type<Container>,Shape*> { for_each(c, [](Shape* p){ p->draw(); }); }
�v�nement : GoingNative 2013Conf�rence suivante : Sean Parent - C++ Seasoning
Et vous,
Qu'en pensez-vous ?
Partager