04/01/2008 12:45:47

Mon sujet de stage pour les nuls

Comme promis, voici une présentation de mon sujet de stage de master 2. Que le lecteur ne se sente pas insulté par le titre, si j'écris "pour les nuls", c'est simplement que je n'attends pas de vous de savoir ce qu'est un thread coopératif, un style par passage de continuations ou une sémantique opérationnelle. Je sacrfierai donc une (petite) partie de la rigueur scientifique à la clarté des explications.

Mon stage cause des langages de programmation. Un langage de programmation, c'est un outil pour écrire un programme informatique. Vous avez sans doute entendu mille fois qu'un ordinateur, ce n'est fait que de 0 et de 1 : c'est en quelque sorte vrai, mais évidemment que les informaticiens ne s'amusent pas à taper des suites de 0 et de 1 toute la journée. Ils écrivent donc les programmes dans des langages particuliers, qui sont ensuite traduits en 0 et en 1 par un programme spécifique, qu'on appelle le compilateur.

Les petits malins demanderont immanquablement : « mais le compilateur, c'est aussi un programme, alors comment on a pu l'écrire, si on n'avait pas de compilateur ? » La réponse à cette passionnante question de l'oeuf et de la poule est évidemment : avec un autre compilateur. Lui-même compilé avec un autre compilateur, et ainsi de suite. Bien sûr, le premier compilateur, il a fallu l'écrire entièrement à la main, mais c'était possible car à l'époque les langages de programmations étaient très simples, donc les compilateurs aussi.

En règle général, n'importe quel langage de programmation permet de coder n'importe quel logiciel ; on dit que le langage est Turing-complet, c'est-à-dire qu'il permet d'écrire une machine de Turing (voir mes autres articles sur Turing), qui elle-même permet d'écrire tous les programmes. Enfin, en théorie. Car dans la pratique, chaque langage fourni des facilités pour tel ou tel domaine : certains sont plus adaptés à l'écritures de programmes pour Internet, d'autres de programmes bancaires, de contrôle d'un terminal téléphonique ou encore de commande d'une fusée Ariane. Ainsi, le programmeur voulant écrire un nouveau programme choisira le langage le plus adapté pour cette tâche.

Le but de mon stage est d'enrichir un langage très généraliste (le langage C), qui permet de faire un peu de tout, mais qui n'est spécialisé dans pas grand chose, avec de nouvelles fonctionnalités. On obtient alors un langage étendu, appelé CPC, adapté à l'écriture de programmes concurrents. La concurrence, c'est tout simplement quand un programme a besoin de faire plusieurs choses à la fois.

Par exemple, votre navigateur web est sans doute capable de charger plusieurs sites Internet en même temps (dans différents onglets). Pour cela, il récupère le début des données du premier site, puis passe au début des données du second, puis revient au premier et récupère la suite, etc. La manière dont cela se passe en pratique, la plupart du temps, c'est que le programme lance des petits sous-programmes, appelés threads, chacun destiné à faire une opération différente. Ensuite, il s'assure que les threads fonctionnent en alternance, de manière équitable.

Mais alors, si ça existe déjà, quel est l'intérêt de CPC, le sujet de mon stage ? Il se trouve qu'à l'heure actuelle, les systèmes permettant de faire des threads sont assez lourds. Par conséquent, le programmeur est obligé de faire quelques gros threads, alors qu'il aurait parfois envie d'en avoir beaucoup de petits : chaque petit thread ferait une opération toute simple, et il n'y aurait plus qu'à les combiner pour faire un gros programme concurrent. C'est le but de CPC : fournir des threads les plus légers et rapides possible, pour permettre au programmeur d'en utiliser autant qu'il le souhaite, et donc écrire plus facilement et naturellement des programmes concurrents.

Et comment ça marche ? Sans rentrer dans les détails (j'y reviendrai sans doute plus tard), un programme CPC est d'abord transformé en un programme C classique, puis compilé par n'importe quel compilateur C. On retrouve l'idée que tous les langages sont capables de tout faire : les fonctionnalités ajoutées dans CPC peuvent être exprimées directement dans C, le langage qu'il étend, mais la traduction est trop complexe pour qu'un humain la fasse spontanément. D'où l'utilité de CPC.

Et alors, moi dans tout ça, je sers à quoi ? Et bien pour l'instant, CPC existe déjà et fonctionne plutôt pas mal du tout. Mais il n'a pas été prouvé que la traduction de CPC vers C est correcte, c'est-à-dire que le programme C résultant se comportera conformément à ce que prévoit CPC. Mon rôle sera notamment de prouver la correction de cette traduction (ainsi que d'améliorer CPC), qui a tout l'air de fonctionner parfaitement en pratique mais sans qu'on sache vraiment l'expliquer pour l'instant.

PS : j'ai essayé d'être le plus didactique possible. J'en ai peut-être trop fait, ou justement pas assez, je ne sais pas. Si vous pouviez prendre le temps de me laisser un message de quelques lignes pour me dire ce que vous en pensez, je vous en serais très reconnaissant.


Kray Kitty, qui a trouvé ça très clair, en profite pour signaler un clin d'oeil à propos de langages de programmation.


Posté par Gabriel | Lien | Catégories Ma vie | Votez pour cet article sur Wikio

Envoyer un commentaire (par mail).