web-dev-qa-db-fra.com

Quelle est la différence entre asm.js et WebAssembly?

Je lisais récemment sur asm.js et WebAssembly:

http://ejohn.org/blog/asmjs-javascript-compile-target/

https://brendaneich.com/2015/06/from-asm-js-to-webassembly/

Je suis encore confus sur certaines choses:

  1. Le code asm.js est-il compilé à temps et exécuté? Compilé dans quoi?
  2. À part asm.js étant du texte et wasm (web Assembly) du binaire, quelles sont les différences entre les 2?
  3. Qu'est-ce que cela signifie pour les autres langages de script exécutés dans le navigateur? Prenez python par exemple, est-ce que ça va être
    • code python compilé pour wasm? ou
    • interprète python (Cpython) compilé dans wasm et interpréter python?
89
NeoWang

Le code asm.js est-il compilé à temps et exécuté? Compilé dans quoi?

asm.js est un code javascript normal, et est toujours compilé en bytecode par l'interpréteur JS. Cependant, un interprète avec le support asm est supposé faire une compilation à l'avance, et éventuellement générer une représentation de code plus efficace en raison du typage statique. Voir http://asmjs.org/ pour plus de détails.

quelles sont les différences entre asm et wasm (autres que texte vs binaire)?

Aucun pour l'instant. wasm est supposé être rétro-compatible, compilable en asm (qui est à nouveau exécutable en tant que JS normal). Il pourrait toutefois être étendu avec plus de fonctionnalités à l'avenir, à mesure que le support augmente.

Qu'est-ce que cela signifie pour les autres langages de script exécutés dans le navigateur?

Ce dernier, plutôt, comme Python doit encore être interprété. Les langages de script qui n'ont pas besoin d'interpréteur peuvent bien sûr être directement compilés dans (w) asm, étant donné qu'il existe un compilateur ( chaîne) qui la prend comme cible.

43
Bergi

asm.js est un sous-ensemble de JS avec des instructions "hautement optimisables". En gros, vous pouvez déclarer le type (int, float) et le moteur js (dans les navigateurs mais également dans celui de node.js) exécutera les instructions plus rapidement. Il présente des avantages si votre application effectue beaucoup de calculs ou de graphiques si elle est utilisée avec WebGL.

web Assembly est un format binaire pour JS, tous les JS, et pas seulement asm.js. Ce n'est pas un bytecode, c'est un encodage binaire de AST) calculé par l'analyseur. Il présente 2 grands avantages:

  • le moteur JS peut ignorer l'étape d'analyse
  • c'est beaucoup plus compact que la source originale de JS

Nous pouvons déjà écrire du code pour des navigateurs qui ne sont pas JS: EMSCripten peut compiler du code c ++ en code JS. D'autres transcompilateurs sont déjà disponibles pour compiler votre code dans JS. En utilisant asm.js, ce code peut être exécuté plus rapidement en mathématiques. En utilisant web Assembly, ce code sera plus compact et le navigateur pourra le traiter plus rapidement (car il pourra ignorer l'analyse). Vous n'aurez pas de nouveau plug-in à charger, comme DirectX, JavaApplets, Flash ou Silverlight, car tout se déroulera dans le bac à sable JS.

48
cristian v

Le code asm.js est-il compilé à temps et exécuté? Compilé dans quoi?

Différents navigateurs compilent le code asm.js de différentes manières. En août 2015:

  • Firefox compile asm.js en code machine (et met en cache le code machine pour les charges futures du même asm.js) [ 1 ].
  • Dans Windows 10 en tant qu'indicateur expérimental, Edge effectuera également une validation et une compilation anticipées de asm.js [ 2 ].
  • Chrome reconnaît spécialement la directive "use asm" au début de asm.js pour l’analyser et l’analyser plus rapidement avec le code et les heuristiques de compilation Tweak.
  • Safari ne fait pas de traitement spécial de asm.js.

À part asm.js étant du texte et wasm (web Assembly) du binaire, quelles sont les différences entre les 2?

asm.js est juste JavaScript et doit donc se comporter exactement selon la spécification JavaScript. En tant que nouvelle norme, WebAssembly est capable de corriger certains cas où le comportement JavaScript n’est pas idéal (du point de vue des performances ou de la compilation) []. À l'avenir [ 4 ], WebAssembly pourra ajouter des fonctionnalités qu'il serait difficile d'exprimer autrement en JavaScript.

Qu'est-ce que cela signifie pour les autres langages de script exécutés dans le navigateur? Prenez python par exemple, est-ce que ça va être

  • code python compilé pour wasm? ou
  • interprète python (Cpython) compilé dans wasm et interpréter python?

Dans la v.1, le moyen le plus simple d’exécuter Python dans un navigateur consiste à compiler un interpréteur Python de wasm, comme vous l’avez dit. Cela signifie, par exemple: , le Python GC s'exécute en code wasm et gère manuellement la mémoire linéaire de ce dernier. Il y a déjà eu des projets expérimentaux visant à ajouter un backend asm.js à PyPy [ 5 =] (qui pourrait tout aussi bien fonctionner avec wasm), qui se heurte actuellement à des limitations d'asm.js qui pourraient être résolues par le fonctionnalité de liaison dynamique future de wasm. Pour aller plus loin, wasm cherche à fournir les deux intégration du GC et support de la compilation JIT , ce qui permettrait une intégration plus efficace et plus naturelle avec la plate-forme Web.

19
Luke