Mot-clé - standard ISO

Fil des billets - Fil des commentaires

12 mar. 2013

Programmation concurrente : threads et variables atomiques

thread.jpg

Les deux articles précédents sur ce sujet n'ont fait qu'aborder des concepts qui, certes utiles pour la compréhension des articles à venir, n'ont pas encore permis d'approcher les nouveautés de C++11 dans le domaine de la programmation concurrente. Le but de cet article est donc de rentrer enfin dans le vif du sujet, en décrivant les interfaces proposés par la librairie et les mécanismes implémentés dans le langage.

Vu l'énormité des apports à ce niveau, ce billet va se contenter d'une première approche en décrivant principalement deux points importants : les threads et les mécanismes de synchronisation.

Lire la suite...

25 fév. 2013

Programmation concurrente : le modèle de mémoire C++11

thread.jpg

Dans l'article précédent, on a pris contact avec ce qu'est la programmation concurrente, et comment elle était (grosso-modo) mise en oeuvre dans les systèmes d'exploitation récent. On a aussi parlé de primitives de synchronisation et de tout un tas de petites choses qui sont autant de concepts importants, nécessaires à une bonne compréhension du problème. Et dans ce cadre, la relation avec le standard C++11 a été mis de coté de manière explicite.

Cet article revient sur le C++11, mais d'une façon détournée : on va parler du modèle de mémoire mis en place par le standard.

Lire la suite...

01 août 2012

C++11 : il y a des choses qui changent

Annoncer à grand renfort de publicité (ou pas) qu'il y a eu quelques changements dans la nouvelle norme C++ 11 par rapport à la précédente norme de 2003, c'est un peu comme dire qu'il se pourrait que la lune soit distante de la terre d'un peu plus de 400 mètres : ça n'a pas grand intérêt, parce que c'est évident. Tout le monde[1] sait que C++11 apporte son lot de nouveautés, et que celles-ci sont importantes : rvalue references, le mot-clef auto, les variadic templates, la gestion de la concurrence, etc. Les additions sont nombreuses et quelques fois complexes.

Par contre, ceux qui, croyant bien faire, pensent que le nouveau standard conserve un compatibilité parfaite avec la version précédente du standard pourraient avoir quelques mauvaises surprises. Et pas seulement à la marge...

Note

[1] enfin, tous les programmeurs C++ qui s'intéressent un tant soi peu au langage lui-même

Lire la suite...

20 janv. 2011

Le futur standard C++ : introduction aux expressions rationnelles

Décidément, ce blog fait la part belle au C++ en ce moment. Mais on ne se refait pas, et plus j'étudie le standard à venir, plus ses possibilités provoquent en moi le désir d'en savoir plus (et de partager avec vous ce savoir). Rajoutez à cela que le projet sur lequel je travaille nécessite de ma part d'écrire un outil de taille relativement modeste dans ce langage, et vous aurez une vision assez claire de ce à quoi je passe mes journées en ce moment. Mais nous ne sommes pas ici pour discuter des turpitudes de ma vie, donc passons au sujet qui nous intéresse.

Le TR1 avait introduit les expressions régulières directement tirées de la librairie Boost. Puisque le TR1 n'a jamais vraiment pris (la faute aux vendeurs de compilateurs, qui ont délaissé cette extension de la librairie jusqu'à récemment), on trouve peu d'exemple d'utilisation de cette fonctionnalité. Profitons donc du fait que les expressions régulières arrivent dans le nom d'espace std pour nous y intéresser.

Lire la suite...

21 déc. 2010

C++ et l'internationalisation

Ce billet avait été publié une première fois, mais contenait un grand nombre d'erreurs factuelles. Il a été corrigé et amélioré depuis, et le voici publié à nouveau.
Mise à jour du 27 déc. 2010 : certaines erreur de typographie ont été corrigées

Il vous est certainement connu que dans le standard, les classes de chaines de caractère - ainsi qu'en fait tout ce qui manipule des chaines de caractère - sont représentée par une classe template nommée std::basic_string<>. L'un des paramètres de cette classe template est le type des caractères stockés dans la chaine. Et bien évidemment, le standard défini deux types distinct de chaines de caractères : std::string, qui est un std::basic_string<char>, est utilisé pour stocker des chaines ASCII traditionnelles tandis que std::wstring (un type alias sur std::basic_string<wchar_t>) est utilisé pour représenter des chaines dont chaque caractère fait sizeof(wchar_t) bytes[1]. wchar_t est le type caractère large, et est généralement utilisé pour encoder des caractères utilisant le jeu de caractère Unicode.

Du coup, on se surprend à penser qu'il est aisé de transformer une chaine simple, de type std::string, en une chaine en caractères larges de type std::wstring : un simple coup d'algorithme standard du type std::copy, voir l'utilisation de std::basic_string<>::assign() et hop, c'est fini. Du coup, traiter l'internationalisation dans un programme C++ parait d'une simplicité enfantine.

Bien évidemment, si c'était aussi simple, on n'aurait pas besoin de personnes intelligentes au comité de normalisation du C++... Y-aurait-il anguille sous roche ?

Notes

[1] selon le standard C++, sizeof(char) == 1 byte ; il ne s'agit pas d'un octet, mais d'une unité de mesure définie par le texte du standard.

Lire la suite...

02 déc. 2010

Le futur standard C++ : apparté

Je sais que je ne devrais plus toucher au sujet, mais voilà qu'enfin, une personne du comité de normalisation du C++ a enfin compris ma détresse. De quoi est-ce que je parle ? Et bien, tout simplement d'un article assez ancien, paru sur ce blog, et qui a déjà connu plusieurs suites. Tout a commencé il y a quatre (courtes ?) années, par ce billet : Etude du C++ Technical Report 1 - reference_wrapper. Deux errata ont suivi : le premier paru quelques jours plus tard, donne une idée du noeud du problème : il y a un problème dans la norme C++. Le second fait état d'une conversation avec Pete Becker (l'éditeur du comité de normalisation C++ la personne chargée à l'heure actuelle de mettre à jour le document normatif), qui contredit un peu mon argumentaire précédent. Enfin, le dernier billet est une vérification de l'implémentation de std::tr1::reference_wrapper<> dans le Service Pack 1 de Visual Studio .Net 2008.

Il fallait une conclusion à tout ça, et j'espère que ce billet l'apportera enfin. Un élément nouveau est récemment venu apporter de l'eau à mon moulin.

Lire la suite...

01 sept. 2010

Le futur standard C++ : les fonctions lambda

Je me souviens de ces vertes années où, élève ingénieur, j'ai appris ce qu'étaient les fonctions lambda. La beauté de la chose m'avait alors complètement échappé, d'autant plus que programmant principalement en C et en C++, je n'en avais strictement aucun besoin. A noter que le caractère qui m'apparaissait particulièrement abscons de ces constructions était principalement du au fait qu'on étudiait alors le meilleur langage du monde, que des spécialistes énamourés ont surnommé "plein de parenthèses insipides".

10 ans après, la nouvelle tombe : mes langages de prédilection (à l'heure actuelle, C# et C++[1]) intègrent les fonctions lambda. Bon. OK. Il est temps d'y réfléchir sérieusement.

Notes

[1] Le draft le plus récent du language C++ est disponible en ligne ici N3126:

Lire la suite...

08 fév. 2010

Le futur standard C++ : les templates variadiques

Oui, je sais, variadique n'est pas un mot très franchouillard (et franchouillard n'est pas trouvé par le dictionnaire de Firefox, qui me propose antibrouillard à la place). Il faut toutefois bien trouver quelque chose. Les fonctions à un argument sont des fonctions monadiques. Une fonction à plusieurs arguments est dite polyadique. Alors utiliser le néologisme "variadique" pour parler d'un nombre d'arguments variable ne me choque pas vraiment - d'autant plus que ce néologisme est très utilisé dans la communauté C / C++.

Outre cette digression, reste à expliciter le but de cet article. Comme les articles précédents de la série (et certains commencent à être ancien), cette saillie technique va tenter de vous donner quelques informations d'importance concernant cette nouveauté du futur standard C++ - l'une des plus importante, si vous voulez mon avis.

Lire la suite...