web-dev-qa-db-fra.com

Qu'est-ce que ASM.js et qu'est-ce que cela signifie pour tout le monde?

Je commence à entendre des rumeurs sur ce projet appelé ASM.js . Actuellement, leur site Web est horrible et déroutant. Voici ce que je sais de mes recherches sur le web.

  • Il s'agit d'un sous-ensemble de JavaScript qui peut être hautement optimisé. Je suppose, car cela évite les parties les plus dynamiques de la langue.
  • Les performances du code compilé en ASM.js s'exécutent à environ la moitié de la vitesse de C (pas léger).
  • L'intention est que les compilateurs fassent de leur langue cible ASM.js.
  • Firefox va être livré avec l'optimisation ASM.js intégrée.
  • Les équipes Mozilla et Unreal ont porté le Unreal Engine sur le Web avec lui et son exécution dans une version de Firefox à des vitesses quasi natives.

Il ne semble pas y avoir d'informations concrètes sur le Web sur ce que c'est vraiment ou l'utilité ou le but ultime. Est-ce que je peux compiler mes bases de code sinon côté serveur et les faire exécuter dans le navigateur à des vitesses proches de celles natives? Quelles sont les ramifications pour les développeurs?

28
Jarrod Nettles

Vous avez déjà décrit ce que c'est . L'utilisation est que c'est un langage de bas niveau qui fonctionne sur tous les navigateurs , est assez rapide dans la plupart et très rapide dans certains. Ce que vous en pensez est aussi ouvert que ce que vous faites avec n'importe quel autre langage de programmation.

Le cas d'utilisation auquel Mozilla semble le plus attaché est le suivant: Il existe déjà des moyens de compiler des langages avec des backends LLVM (principalement C et C++) en JavaScript, via Emscripten. asm.js est très proche de ce que Emscripten émet déjà, ce qui permet au code Emscripten (qui est déjà incroyablement rapide sur les compilateurs JavaScript JIT d'aujourd'hui) de devenir encore plus rapide, ce qui contribue à l'objectif de portage des bases de code existantes sur le Web. Encore une fois, ce que vous utilisez exactement, c'est votre décision. Le portage de jeux est un cas d'utilisation (dans lequel Mozilla est apparemment activement impliqué), mais il existe d'innombrables choses écrites en C et C++, dont beaucoup pourraient être utiles pour le site Web de quelqu'un. Certains que j'ai vus jaillir (plus certains de ma propre conception), sans aucune garantie de faisabilité:

  • Portage d'algorithmes à usage général (par exemple zlib, libjpeg, openssl, implémentations FFT) pour permettre à JavaScript/sites Web de faire plus, sans avoir à créer une nouvelle norme Web et en fonction des navigateurs individuels pour la mettre en œuvre.
  • Portage d'interprètes, afin que d'autres langues que JavaScript puissent s'exécuter dans le navigateur, avec moins de surcharge et un effort de portage minimal.
  • Utiliser asm.js comme backend pour plus de compilateurs, en particulier ceux qui ne correspondent pas bien à JavaScript et qui n'ont pas besoin de la plupart de ses fonctionnalités et de ses frais généraux. Un exemple pourrait être un langage conçu pour un travail numérique rapide sans allocation de mémoire.
  • Utilisation de asm.js pour créer un JIT en JavaScript. Il peut implémenter n'importe quel langage - par exemple ActionScript .
  • Dans la même veine, le portage des compilateurs JIT existants pour s'exécuter dans le navigateur (cf. portage des interprètes, avec en fait zéro surcharge sur JS). Cela n'est probablement possible que lorsque les compilateurs JIT sont générés automatiquement, comme avec PyPy.
21
user7043

Imaginez ASM.js comme un grand ArrayBuffer binaire appelé un tas et un ensemble de modules JavaScript, qui commencent par une directive de prologue: "use asm"; et effectuer des opérations rapides de bas niveau sur des données binaires brutes, similaires aux langages d'assemblage. Ces modules pourraient être écrits à la main ou mieux compilés à partir du code LLVM par des scripts comme Emscripten. Leurs performances pourraient être améliorées grâce au moteur Mozilla OdinMonkey, mais elles sont rétrocompatibles avec la plupart des interpréteurs ECMAScript modernes.

ASM.js n'est pas limité aux jeux, vous pouvez même exécuter des applications Qt entières dans votre navigateur, comme ces !

4
niutech