Wednesday, July 26, 2006

Le nouveau C++ : C++0x

Le C++ standard commence à se faire vieux. Bien que la version actuelle ne date que de 1998 (C++98), de nombreux défauts commencent à se faire sentir. Après avoir gouté aux joies de langages plus faciles d’accès (C# et Java *), il est difficile de retourner au C++ standard.

Bien sur les avantages du C# et Java sur le C++ s’expliquent par le fait qu’ils ne soient pas comparables… Les deux premiers sont plus faciles d’accès en premier lieu parce que ce ne sont pas que des langages, ce sont aussi des plateformes de programmation complète (les machines virtuelles Java et .NET avec les collections d’objets associés). Ainsi, pas besoin de chercher quel API utilisé pour réaliser ses GUIs, parsing XML, accès aux web services, … tout ce qu’il faut pour réaliser la base de ces programmes est fournie. Le C++ standard lui nécessite de nombreuses librairies avant de pouvoir réaliser quelque chose. C’est tout à la fois la force du C++ (possibilité de l’utiliser pour faire à peu prés tout et n’importe quoi sur n’importe quelle plateforme, une fois munie de la bonne libraire) et sa faiblesse.

Cependant, je pense que même sur un plan plus comparable de nombreux reproches sont à faire au C++. L’absence de gestion automatique de mémoire, une syntaxe parfois lourde (essayer de faire un template de template puis d’itérer dessus).

Bref le C++ en l’état n’est clairement pas mon langage de choix pour le développement. Cependant le comité de standardisation du C++ s'est remit au travail après quelques années de silence. Ce comité est en train de travailler sur les spécifications du nouveau C++, le C++0x avec peut être le 9 en lieu et place du x (encore 3 ans à attendre …).

Cette nouvelle déclinaison du C++ me parait très prometteuse. Le créateur du C++ (Bjarne Stroustrup) fait partie du comité et milite activement pour l’intégration de plus de librairies :

  • gestion des Threads

  • expressions régulières

  • ajout de containers à la stl actuel

  • fonctions mathématiques

  • pointeurs intelligents

  • éventuellement mais peu crédible GUI

  • ...

Bref beaucoup de choses très utiles, notamment les « smart pointers » (sans doute issue de la librairie de Boot) qui offre une méthode pour la gestion automatique de mémoire. Certes le comptage de référence (si je ne m’abuse les pointeurs intelligents ne savent guère faire plus en matière de gestion automatique), est moins simple qu’un garbage collector (Java, C#, …) mais cela reste un grand pas en avant.
Ce nouveau standard doit aussi apporter de nombreuses facilités syntaxiques :

  • fonctions anonymes

  • for-each

  • itérateur de type « auto »

Ces « Syntaxic sugar » devraient grandement améliorer la facilité d’écriture et de lecture du code source.
Pour en savoir plus :


* : J’ai volontairement omis de parle de langages encore plus haut niveau comme le python, tout d’abord parce que je ne les connais pas suffisamment, mais aussi parce qu’ils ne me paraissent pas destiné aux mêmes usages.

2 comments:

Anonymous said...

J'ai trouvé ce blog sur Développez.com (dockurt2k).

En effet j'ai vu quelques exemples de code du "nouveau C++", ça m'a l'air très sympa. Les smart pointers je les utilise déjà avec boost, ca ne sera pas trop déroutant ainsi !

Par contre le type "auto" ça a l'air vachement cool ! Dans l'exemple en faisant un simple auto i, le auto se remplacait à vector < objet >::iterator par exemple. Sympa ^^ Et puis ce maudit "bug" du vector < vector < objets >> enfin corrigé ^^.

"Desole pour les accents, clavier qwerty suedois" (vu sur un topic de dvlp.com)

Och en lite frågor, såg jag att du har ett svenskt tangenbord ^^, så är du svensk ? Förlåt om min svenska är dåligt ^^.

Hej då.

Anonymous said...

Bon j`ai pas tout lu je me galere deja assez avec Java for Artist (genre 1000 pages, c est parti !) dc je lirais tout le stuff tech plus tard, dsl ;)

Bon faut qu`on discute du KM la dc je t enverrais un mail bientot ca devient important. ++ Fabien