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 :
- si vous téléchargez Robby roto and friends pour Chrome, vous obtenez en réalité le le Multi Arcade Machine Emulator capable d’émuler un nombre incroyable de jeux d’arcade d’époque pour autant que vous lui fournissiez un fichier contenant la ROM d’époque. MAME porté en JS arrive donc à émuler en temps réel les processeurs Z80, 6502 etc de ce bon vieux temps4. Ce portage a été fait par des googlers…
- le projet jsmess webifie quant à lui le Multi Emulator Super System capable d’émuler d’autres machines d’époque. La version Javascript supporte déjà Atari 2600·ColecoVision·Fairchild Channel F, Odyssey2·Sega Genesis et la Texas Instruments 99 4/a , et d’autres bientôt !
Pour ma part je tire plusieurs leçons de ce qui est en train de se passer:
- le hardware devient obsolète plus vite que le soft, qui peut survivre grâce à l’émulation du hardware
- la frontière entre système d’exploitation et applications et entre compilation et interprétation disparaît complètement
- 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 ?
Pourquoi sur ce site tous les accents sont faux??? Pas UTF8?. C’est illisible sur iphone
ça a l’air d’être le truc sensé formatter pour les mobiles, le site « full » est ok… j’investigue…
voilà trouvé : il y avait deux extensions pour mobile qui se marchaient dessus. J’en ai enlevé une, et ça marche sur mon Samsung… Merci de l’avoir signalé !