Ouvrir le menu principal

MacGeneration

Recherche

Emscripten : du C++ vers JavaScript via LLVM

Arnaud de la Grandière

vendredi 07 septembre 2012 à 10:52 • 10

Ailleurs

L'une des grandes quêtes du développement logiciel depuis de nombreuses années consiste à permettre l'exécution d'un code arbitraire sur n'importe quelle architecture matérielle sans avoir à rien recoder.

De nombreuses architectures se sont frottées au problème (de Java en passant par .NET) sans pour autant parvenir à résoudre la quadrature du cercle : celles-ci ne prennent pas en charge le code natif dans des langages universels tels que le C/C++.

De son côté Google a bien tenté de remédier à la question en proposant Native Client, un plugin qui permet l'exécution d'un même code en natif dans n'importe quel navigateur (lire Google NaCl : du code natif dans le navigateur), mais les plugins sont en passe de tomber en désuétude et NaCl ne semble pas décoller.

Le problème devient d'autant plus prégnant avec l'avènement des plateformes mobiles, pour lesquelles JavaScript est en passe de devenir le seul sésame garanti.

C'est là où LLVM entre en jeu : cette technologie open-source (chapeautée par Apple, lire Apple tire le jus des processeurs) permet d'insérer une couche d'abstraction dans la compilation d'un code. Ce BitCode intermédiaire est alors susceptible d'être adapté à toute machine de destination, sans pour autant perdre le moins du monde en efficacité. Google a d'ailleurs créé une passerelle entre NaCl et LLVM.

Un développeur de Mozilla, Alon Zakai, a mis au point un compilateur nommé Emscripten, qui tire parti de cette capacité, en convertissant du BitCode LLVM en JavaScript. Ainsi, LLVM devient la passerelle entre n'importe quel langage qu'il est susceptible de prendre en charge (C/C++ en tête, mais également Python, Ruby, etc), et le navigateur.

Naturellement la conversion ne fonctionne pas de manière universelle : certaines commandes ne pourront pas être compilées, d'autres seront particulièrement lentes à l'exécution (Zakai donne une liste des choses à éviter), et il ne faut pas oublier que le JavaScript reste un langage interprété qui sera bien plus lent à l'exécution que du code natif (un benchmark donne Emscripten jusqu'à 140 fois plus lent que du code natif). De même, tous les moteurs JavaScript, qui varient d'un navigateur à l'autre, ne se valent pas. Ainsi certains projets réalisés avec Emscripten fonctionneront parfaitement sur certains navigateurs et beaucoup moins bien sur d'autres.

Il n'en reste pas moins que la prouesse est impressionnante : le GitHub consacré à Emscripten propose quelques démonstrations qui, si elles s'exécutent avec plus ou moins de bonheur d'un navigateur à l'autre, laissent miroiter la promesse du "write once, run anywhere".

Ainsi, Open-TTD, lui-même une version open-source du jeu Transport Tycoon, a pu être converti entièrement en JavaScript grâce à Emscripten, et est ainsi susceptible de fonctionner sur toute machine dotée d'un navigateur et d'un moteur JavaScript.



De même, il devient possible d'étendre les capacités des navigateurs sans même installer le moindre plugin, et en se contentant d'exploiter leur modularité native par le biais de JavaScript : cette démo permet d'afficher des images au format JPEG 2000, et cette autre rendra du PDF, sans même que le navigateur ne sache prendre en charge ce format. Un développeur a également porté son jeu écrit en C++ directement en JavaScript, prêt à fonctionner dans un navigateur, à l'aide d'Emscripten.

L'ajout de WebGL dans les navigateurs ouvre également à Emscripten l'accès de l'accélération matérielle (et du GPGPU, lire Lexique : si vous avez raté le début), et offre des perspectives enthousiasmantes.

Si Emscripten, dont le chantier a été entamé voilà deux ans, fait parfois plus œuvre de démonstration technique brillante que d'outil prêt à être exploité grandeur nature pour tout type de projet, il n'en souligne pas moins les avancées des moteurs JavaScript d'une part, et de l'autre l'excellente souplesse de LLVM, s'il fallait encore s'en convaincre.

Soutenez MacGeneration sur Tipeee

MacGeneration a besoin de vous

Vous pouvez nous aider en vous abonnant ou en nous laissant un pourboire

Soutenez MacGeneration sur Tipeee

Du DynaTac à l’iPhone Air, en passant par l’antennagate : comment l’antenne a évolué depuis le premier portable

07:43

• 15


Le prix de l'iPhone Air continue de s'écrouler : 889 € en import, 1099 € chez Amazon !

11/10/2025 à 16:33

• 64


MacBook Pro M5 : un lancement en deux temps qui se précise

11/10/2025 à 15:36

• 34


Prime Day : le Mac mini M4 encore sous les 600 € 🆕

11/10/2025 à 14:24

• 14


CarPlay : iOS 26 ne permet pas encore de regarder des vidéos dans les voitures, mais les constructeurs s’y intéressent

11/10/2025 à 11:53

• 16


Pour se remettre dans la course à l’IA, Apple mise sur PromptAI, une start-up de… 11 personnes

11/10/2025 à 11:52

• 55


Sortie de veille : un nouveau keynote Apple à la fin du mois avec plein de produits ?

11/10/2025 à 08:00

• 9


En cinq ans, la 5G a couté des milliards aux opérateurs, mais n’a pas conquis les Français

10/10/2025 à 20:55

• 48


macOS 26 peut surconsommer la mémoire vive chez certains utilisateurs, y compris sur macOS 26.0.1

10/10/2025 à 20:30

• 57


Les deux stations pour Mac mini M4 d'Ugreen sont en promotion à seulement 70 €

10/10/2025 à 19:50

• 11


Les Crocs aux couleurs de Windows XP pour les 50 ans de Microsoft sont en vente 🆕

10/10/2025 à 19:03

• 47


Une nouvelle bande-annonce qui cultive le mystère pour Pluribus, la série d'Apple et du créateur de Breaking Bad

10/10/2025 à 18:00

• 17


Apple muscle son bug bounty avec des primes record pour les failles les plus sophistiquées

10/10/2025 à 16:10

• 17


Pour la première fois, l'iPhone 16e (neuf) passe sous les 500 € ! 🆕

10/10/2025 à 14:46

• 22


Google offre un an de Gemini Pro et 2 To de stockage aux étudiants

10/10/2025 à 14:41

• 19


Dia : le successeur d'Arc carburant à l'IA désormais accessible à tous

10/10/2025 à 12:57

• 26