J'ai lu 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:
- Le code asm.js est-il compilé à temps et exécuté? Compilé en quoi?
- A part asm.js étant du texte et wasm (web assembly) étant binaire, quelles sont les différences entre les 2?
- Qu'est-ce que cela signifie pour les autres langages de script, exécutés dans le navigateur? Prenons python par exemple, est-ce que ça va être
- code python compilé en wasm? ou
- interpréteur python (Cpython) compilé dans wasm et interpréter python?
la source
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 aussi celui de node.js) exécutera les instructions plus rapidement. Cela présente des avantages si votre application effectue beaucoup de calculs ou de graphiques si elle est utilisée avec WebGL.
l'assembly web est un format binaire pour JS, tous JS, pas seulement asm.js. Ce n'est pas un bytecode, c'est un encodage binaire de l'AST que l'analyseur calcule. Il présente 2 grands avantages:
Nous pouvons déjà écrire du code pour les 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 en JS. En utilisant asm.js, ce code peut s'exécuter plus rapidement lorsqu'il fait des calculs. En utilisant l'assembly Web, 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 plugin à charger comme DirectX, JavaApplets, Flash ou Silverlight car tout fonctionnera dans le sandbox JS.
la source
Différents navigateurs compilent le code asm.js de différentes manières. Depuis août 2015:
asm.js est juste du JavaScript et doit donc se comporter exactement selon les spécifications JavaScript. En tant que nouveau standard, WebAssembly est capable de résoudre certains cas de coin où le comportement JavaScript n'est pas idéal (du point de vue des performances ou de la compilation) [ 3 ]. Dans le futur [ 4 ], WebAssembly pourra ajouter des fonctionnalités qui seraient autrement difficiles à exprimer en JavaScript.
Dans la v.1, le moyen le plus simple d'exécuter Python dans un navigateur sera de compiler un interpréteur Python vers wasm, comme vous l'avez dit. Cela signifie, par exemple, que le GC Python fonctionne en code wasm et gère manuellement la mémoire linéaire wasm. Il y a déjà eu un projet expérimental pour ajouter un backend asm.js à PyPy [ 5 ] (qui pourrait tout aussi bien fonctionner pour wasm). Il se heurte actuellement à des limitations de asm.js qui pourraient être résolues par la future fonctionnalité de liaison dynamique de wasm. Pour aller plus loin, wasm cherche à fournir à la fois une intégration GC et un support de compilation JIT, ce qui permettrait une intégration plus efficace et naturelle avec la plate-forme Web.
la source