Etude du C++ Technical Report 1 - Introduction | 1 vote(s)
Par Emmanuel Deloget, jeudi 2 novembre 2006 à 11:00 :: C++ :: permalien #27
Tags:
Ce billet est le premier billet d’une série qui concerne non pas le standard C++ mais son extension parue sous le nom de Technical Report on C++ Library Extension - et dont un brouillon est disponible sur le site internet du groupe de travail WG21.
Ce rapport technique, sobrement baptisée TR1 par l’usage, a été officialisé en 2003[1] par le comité ISO, le transformant ainsi en norme. A l’heure d’aujourd’hui les compilateurs récents implémente probablement son contenu – je vous conseille de le vérifier avant utilisation.
TR1 est une extension à la librairie standard. Le coeur du langage n’est pas changé, aucune nouvelle règle n’est introduite ou supprimée, seules de nouvelles fonctions et de nouvelles classes ont été ajoutées. Parmi celles-ci, certaines ne méritent pas qu’on s’y attarde (tout au plus, vous serez ravi d’apprendre qu’un bon nombre de fonctions mathématiques complexes ont été ajoutées dans <cmath> et son pendant <math.h> : fonctions de Legendre associées, intégrale elliptique du premier, second et troisième type, fonctions hypergéométriques et j’en passe. D’autres classes ou fonctions sont toutefois dignes d’intérêt, et c’est celles-ci que se proposent d’étudier cette série de billets.
Mais tout d’abord, j’aimerais vous donner quelques généralités à propos de ce document et des nouveautés qu’il apporte.
Premièrement, le document utilise le vocabulaire mis en place dans le document de référence – le standard C++ ISO/IEC 14882 (dont vous pouvez aussi télécharger un brouillon sur le site du WG21). La lecture de ce document est nécessaire afin de comprendre le TR1, ne serait-ce que parce que le TR1 fait de très fréquentes allusions au standard.
En second, certaines de ces extensions étaient connues et implémentées avec succès dans diverses librairies, la plus connue étant Boost. De Boost, le TR1 a repris nombre de classes (shared_ptr, weak_ptr, array, et ainsi de suite). La différence majeure ne se situe qu’au niveau du nom d’espace utilisé, puisque Boost utilise boost alors que les symboles du TR1 sont tous définis dans le nom d’espace std::tr1 (et dans des noms d’expace contenus dans celui-ci). Ainsi, boost::shared_ptr devient std::tr1::shared_ptr.
Le troisième point à trait à la spécification elle-même : un bon nombre des nouvelles interfaces présentées possède des quantités ou des caractéristiques définies par l’implémentation. En clair, cela veut dire que deux compilateurs différents peuvent implémenter le TR1 de manière légèrement différente. Si on prend l’exemple de std::tr1::tuple, le TR1 spécifie qu’au minimum 10 classes doivent pouvoir être stockées dans un tuple. Si l’un de vos compilateurs veut pouvoir stocker 12 classes, veillez à vérifier que le code que vous produirez pourra être compilé avec un autre compilateur (surtout si vous faites du développement pour plusieurs plateformes). Cela peut poser des problèmes en termes de portabilité du code source.
Ce billet arrive à son terme - il ne s’agissait là que d’une introduction - il est temps maintenant que je vous livre un secret : la suite des événements. Nous allons étudier pêle-mêle les sujets suivants : les classes de smart pointers, les nouveautés du fichier d’entête <functional>, les type traits et leur implication en terme de méta-programmation, les nouveaux conteneurs, et pour terminer la librairie <regex> qui gère des expressions régulières.
Comme vous le voyez, tout un programme, qui devrait nous tenir éveiller quelques mois.
Notes
[1] pour une raison que j’ignore, le brouillon sur le site web du WG21 est daté de 2005 ; je suppose qu’il s’agit d’une erreur survenue lors de l’impression
Commentaires
Aucun commentaire pour le moment.
:: Fil rss des commentaires de ce billet ::
Ajouter un commentaire