Skip to main content

Oubliez les langages de programmation. Vive le compilateur…

Quels langages de programmation pratiquez-vous ? Et en quoi est-ce important ? Au bout du compte, vous essayez en effet de dialoguer avec un système informatique et le matériel n’a guère plus d’affinité avec C# ou java qu’il n’en a avec Python ou R. L’ordinateur pour lequel vous programmez ne comprend qu’une seule chose : le langage machine, autrement dit du code binaire.

1. 0 et 1 ou Hello World

Heureusement pour vous, vous ne devez désormais plus connaître de langage machine pour programmer. Votre code, vous l’écrivez dans un langage de haut niveau qui est ensuite traduit en un code machine. Après tout, il est nettement plus facile de taper Print (‘Hello World’) qu’une séquence de zéros et de uns.

Les différents langages présentent divers avantages, tant objectifs que subjectifs. C’est une vérité universelle. L’anglais, par exemple, semble être particulièrement adapté pour des communications internationales dans le monde de l’aviation. Le français dispose d’un riche vocabulaire pour parler d’amour. Dans le cas des ordinateurs, quel que soit le langage que vous choisissiez, vous avez besoin d’un traducteur. Ce dernier transforme votre oeuvre en uns et en zéros — la magie à l’oeuvre…

2. Se taire et traduire

A l’heure actuelle, le compilateur n’a sans doute plus droit à la dose d’amour qu’il mérite. Le programmeur écrit le code, le compilateur opère sans se plaindre et tout est pour le mieux dans le meilleur des mondes. L’outil fait ce qu’on attend de lui mais personne ne se demande ce qui se passe en coulisses.

Grace Hopper est la personne à qui l’on doit l’invention du compilateur. C’est à elle que vous devez de pouvoir créer des programmes en différentes variantes d’anglais qui atterrissent sur une multitude de systèmes binaires.

Les compilateurs sont la clé de la réussite ou de l’échec d’écosystèmes. C’est le compilateur qui décide si votre code peut tourner efficacement sur des systèmes x86, des smartphones ARM ou des serveurs RISC-V. Grâce au compilateur, vous pouvez rédiger dans votre langage de prédilection et voir le fruit de votre travail devenir, au bout de l’exercice, un fichier exécutable pouvant opérer sur différents systèmes. Si le compilateur s’avère un piètre interprète et traduit vos beaux algorithmes en code apathique, le langage ou le matériel auquel ce compilateur est associé sera alors promis à une mort aussi inéluctable que silencieuse.

3. Modulable

A l’heure actuelle, les compilateurs répondent généralement à la même structure. Ils consistent en trois composantes majeures : le front end, l’optimisation et le back end. Le front end lit votre code et prend en charge une première opération de traduction rudimentaire. Cette dernière passe alors par une phase d’optimisation afin d’être à nouveau traitée par le back end en un format adéquat, compatible avec le système pour lequel vous compilez.

Ce triptyque est essentiel pour le succès des écosystèmes modernes. La modularité d’un compilateur moderne implique que vous devez uniquement adapter le front end lorsque vous désirez introduire un nouveau langage de programmation dans un écosystème existant. Ou, à l’inverse, vous pouvez modifier un compilateur en fonction d’un langage déterminé, pour les besoins d’une nouvelle architecture binaire, en adaptant simplement le back end.

4. Post-Von Neumann

C’est là une chose plus que jamais importante. C’en est fini de l’époque de la Loi de Moore, de la domination x86 et, par extension, des architectures Von Neumann. La fréquence d’horloge et la densité de transistors des processeurs ont leurs limites naturelles et l’échéance se rapproche tout doucement. Côté matériel, la solution a pour nom architecture informatique hétérogène.

Cela signifie notamment que vous utilisiez la bonne architecture pour l’objectif visé (par exemple, ARM pour des applications mobiles) mais également que vous jouiez la carte de la combinaison. Un processeur, désormais, est épaulé par un GPU, un DPU et potentiellement un FPGA, destiné à accélérer une fonctionnalité spécifique.

5. Un soupçon d’amour

La facilité avec laquelle il sera possible de programmer pour les besoins de ces systèmes hétérogènes dépendra en partie des compilateurs. Les nouveaux matériels ne donneront pas immédiatement lieu à un nouveau langage qui puisse remplacer tous les autres. Les langages existants demeurent populaires et de nouveaux feront leur apparition mais, pour réussir, ils doivent pouvoir composer avec une multitude de matériels. Les compilateurs modulaires rendront la chose possible et, pour cette raison, méritent qu’on leur témoigne de temps en temps un peu d’amour.

Votre amour des compilateurs est-il (quasiment) aussi grand que celui que vous inspire la programmation ? Consultez nos offres d’emploi ou envoyez-nous dès à présent une candidature spontanée.

Leave a Reply