Microclub

Emulation en JavaScript

Poursuivant ma quête de pages web capables de faire tourner des programmes antédiluviens ou de petites créations vite faites sur le gaz, je suis tombé sur repl.it . Ce site permet d’exécuter du code dans le bon vieux mode « Read Eval Print Loop« , mais ce qui a titillé ma curiosité, c’est le nombre et la variété des langages supportés. Outre différents dialectes de JavaScript, il y a mon cher Python, mais aussi Ruby, Lua, Scheme (un LISP moderne) et ces bons vieux Forth et QBasic !

Or tout ceci ne tourne pas sur le serveur, mais bien sur votre machine, dans une page web. Comment font-ils ? la réponse figure dans http://repl.it/help : ils utilisent un truc qui s’appelle « emscripten ».

Et emscripten, c’est de la tuerie. Cette chose traduit en javsacript du code LLVM, un code intermédiaire entre le « haut niveau » et l’assembleur, généré par certains compilateurs comme clang par exemple.

En gros, avec emscripten on peut exécuter sur une page web du code C/C++ compilé, donc on peut exécuter CPython ou les autres interpréteurs.

Pour QBasic c’est un peu différent : repl.it utilise qb.js un interpréteur écrit directement en JavaScript par Steve Hanov. Sur sa page on trouve une version complète de son émulateur QBasic qui gère même les « graphiques » en couleur utilisant les bons vieux caractères de l’IBM PC, mais surtout des infos sur la manière dont est fait son interpréteur, avec une remarque intéressante: Javascript est très efficace pour ce genre de choses.

emscripten permet aussi de porter en technologie web des applications conçues initialement pour d’autres plateformes, donc de les rendre multiplateforme de-facto. Il y a par exemple déjà

  • des outils comme SQlite, LaTEX, gnuplot ou graphviz, prêt à être intégrés dans des applications web
  • la plateforme Qt. Avec ça, plein d’applications écrites pour des OS variés peuvent tourner dans des pages web
  • des jeux allant de ce petit jeu sympa et désuet à Epic Citadel, un jeu très pro construit sur le moteur graphique Unreal 3, porté en 4 jours en Javascript, ce qui lui permet de tourner sur Firefox
  • des émulateurs de hardware obsolète comme MAME ou MESS :

Pour ma part je tire plusieurs leçons de ce qui est en train de se passer:

  1. le hardware devient obsolète plus vite que le soft, qui peut survivre grâce à l’émulation du hardware
  2. la frontière entre système d’exploitation et applications et entre compilation et interprétation disparaît complètement
  3. quand le browser sera la seule et unique fenêtre ouverte sur un PC, pourquoi faudra-t-il encore des fenêtres ? et un PC ?

3 réflexions sur “Emulation en JavaScript

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.