Les gens ont porté Doom sur tout, des calculatrices aux caisses enregistreuses McDonald's. Récemment, il y a eu une tendance à exécuter le logiciel sur des plates-formes qui ne disposent pas de la puissance de traitement réelle, les documents PDF et Word étant les derniers exemples. Bien sûr, ces méthodes sont très lentes, mais incroyablement, le jeu peut même être exécuté sur des plateformes non informatiques.
Les gens ont porté Doom sur tout, des calculatrices aux caisses enregistreuses McDonald's. Récemment, il y a eu une tendance à exécuter le logiciel sur des plates-formes qui ne disposent pas de la puissance de traitement réelle, les documents PDF et Word étant les derniers exemples. Bien sûr, ces méthodes sont très lentes, mais incroyablement, le jeu peut même être exécuté sur des plateformes non informatiques.
L'ingénieur logiciel Dmitri Mitropoulos a porté le travail de portage de Doom sur des plates-formes non informatiques à un tout autre niveau. Ce programmeur a réussi à faire fonctionner Doom dans le système de types de TypeScript, qui était si complexe qu'il lui a fallu une année complète pour réaliser cet exploit.
TypeScript est un langage développé par Microsoft qui ajoute des fonctionnalités de vérification de type statique à JavaScript pour détecter les erreurs de codage avant l'exécution. Considérez-le comme un vérificateur orthographique ou grammatical pour votre code, garantissant que les fonctions et les variables sont saisies correctement. Les développeurs l'utilisent souvent pour créer de grandes applications JavaScript.
Exécuter des jeux dans le système de types de TypeScript est considéré comme « impossible ». Mitropoulos a même souligné qu'il avait lancé le projet pour prouver « rapidement » pourquoi cela ne pouvait pas être réalisé. Cependant, au fur et à mesure qu’il approfondissait ses recherches, il devint obsédé par l’idée de les faire fonctionner. En fin de compte, même les développeurs TS expérimentés ont été impressionnés par lui et n'avaient rien à dire.
La version de Doom de Mitropoulos exécutait 3,5 billions de lignes de types et consommait la somme stupéfiante de 177 To. Il faut 12 jours pour compiler une image, ce qui entraîne une vitesse incroyablement lente de 0,0000009645 images par seconde. Le tracker de type TypeScript doit traiter 20 millions d'instances de type par seconde pour produire une sortie, ce qui entraîne des fréquences d'images extrêmement lentes.
Malgré les dépenses, Mitropoulos estime que des gains de performance sont possibles. Sur le canal Michigan TypeScript Discord, il a suggéré qu'avec des optimisations supplémentaires, les temps de compilation pourraient être réduits à « 1 à 12 heures ». Il a identifié les domaines dans lesquels il peut améliorer sa vitesse.
Pour y parvenir, il a construit une machine virtuelle entièrement en utilisant des types TypeScript, y compris l'implémentation logique des 116 instructions WebAssembly nécessaires pour exécuter Doom. Chaque élément d'un ordinateur fonctionnel - mémoire, espace disque, même le cache CPU L1 - doit être minutieusement recréé dans le système de types. Étant donné que TypeScript n'autorise que l'itération des chaînes depuis le côté gauche, il doit taper l'algorithme binaire à l'envers.
L'exécution du programme nécessite un runtime WebAssembly personnalisé qui gère tout dans l'éditeur TypeScript. De plus, le compilateur TypeScript a dû être modifié pour gérer l'ampleur du projet, car le tracker de type à lui seul consommait plus de 90 Go de RAM pendant l'exécution.
Mitropoulos a décrit le travail comme un défi de taille. Il a rédigé 12 364 tests manuscrits, appris plusieurs langages de programmation et estimé initialement que le projet nécessiterait 1,25 Po avant l'optimisation. À un moment donné, la compilation d'un cadre nécessitait une instanciation continue pendant trois mois. Il a dit que l’intelligence artificielle ne pouvait pas aider.
"Oh, l'IA ne peut rien faire avec tout ça", a déclaré Mitropoulos dans sa brève explication vidéo de sept minutes. "C'est un niveau si bas qu'il n'y a pas de tableaux, d'objets, de chaînes ou de booléens à l'intérieur du moteur, juste des nombres binaires, et Doom n'utilise que des entiers de 64 et 32 bits, c'est tout. Oh, et ces entiers ne sont ni signés ni non signés. Il m'a fallu toute la journée pour comprendre cela."
Cette tâche ardue a duré une année complète, à raison de 18 heures par jour. D'autres développeurs de TS ont eu beaucoup de questions sur le projet, c'est pourquoi Mitropoulos prévoit de publier deux vidéos supplémentaires expliquant les détails hautement techniques et ses motivations. Maintenant, nous avons une preuve supplémentaire que Doom peut fonctionner sur n'importe quoi, y compris sur des éléments qui ne peuvent pas du tout exécuter le jeu.