Mot-clé - compilation

Fil des billets - Fil des commentaires

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...

04 sept. 2012

Modification du générateur de parseurs Coco/R

Cet article est une mise à jour d'un ancien article qui avait disparu de ce blog pour de mystérieuses raisons. Avant sa disparition, il est resté en lignes environ un mois, donc il est probable que peu d'entre vous ait eu le temps de le lire. Vous pouvez maintenant en profiter.

Coco/R, développé par Hanspeter Mössenböck, Markus Löberbauer et Albrecht Wöß de l'Université de Linz est un générateur de compilateurs LL(1). Il permet, avec un seul fichier, de créer un couple scanner/parser intégrable en C++, C#, Java et bien d'autres langages encore. L'intérêt du compilateur généré est qu'il est complètement orienté objet : il ne s'agit pas d'un code procédural qu'il faut tenter d'encapsuler au mieux, comme celui qui pourrait être généré par flex+bison. Le code source généré souffre de quelques problèmes - mais au regard du service rendu, on laissera ceux-ci de coté pour l'instant.

Cet article traite d'une modification que j'ai du effectuer dans le code du générateur lui-même, afin de traiter un cas qui n'était pas prévu par les développeurs. Je me suis basé sur la version C++ datée de Novembre 2010 (la dernière version du code source est disponible sur la page web de Coco/R).

Lire la suite...

11 mar. 2012

Optimisation : de la prédiction des branchements

Ne me demandez pas pourquoi j'écris aujourd'hui sur un sujet qui semble si éloigné de mon domaine de prédilection, l'architecture logicielle et le code haut niveau (je vous rassure, ce n'est pas mon seul domaine de compétence). Je n'en ai pas la moindre idée. C'est peut-être le fait d'avoir ce manuel d'optimisation des processeurs Intel sur mon étagère, bien en face de mes yeux. Ou parce que c'est un sujet dont nous avons discuté récemment au travail. Ou parce que ça traînait dans ma tête depuis un petit moment déjà. Ou parce que j'ai lu récemment sur #AltDevBlogADay un post sur un sujet proche.

Quoi qu'il en soit, aujourd'hui je voulais vous parler des branchements que vous ajoutez dans votre code.

Un petit warning avant de continuer : comprendre ce billet pourra nécessiter de votre part une petite mise à niveau sur certains concepts, et notamment sur l'assembleur x86. Connaître le processus de compilation lié à votre langage sera un plus, et avoir une expérience en lien avec le code assembleur généré par le compilateur va probablement vous aider. Enfin, des connaissances sur l'architecture des processeurs (et notamment sur l'architecture des processeurs x86) va probablement simplifier un peu les détails de ce billet.

Lire la suite...