¿Qué "usar asm" hace exactamente?

Por lo que sé, Asm.js es solo una especificación estricta de JavaScript, usa las características de JavaScript y no es un idioma nuevo.

Por ejemplo, en lugar de usar var a = e; , ofrece var a = e|0; .

Mi pregunta es, si asm.js es solo una definición y se puede lograr cambiando la forma en que uno usa y declara las variables y los types dynamics, ¿qué significa "use asm"; en realidad? ¿Es necesario poner esta cadena antes de declarar el cuerpo de la function o no?

Asm.js es un subset muy estricto de JavaScript, que está optimizado para máquinas en lugar de para humanos. Si desea que su browser interprete cierto código como código asm.js, debe crear un module en el que se apliquen las siguientes condiciones:

  • todo el código está totalmente tipado estáticamente y limitado al muy restrictivo subset asm.js de JavaScript
  • su module comienza con el pragma "use asm"

Además, un module asm.js solo permite hasta tres parameters opcionales pero muy específicos:

  • un object de biblioteca estándar, que proporciona acceso a un subset de las bibliotecas estándar de JavaScript
  • una interfaz de function extranjera (FFI), que proporciona acceso a funciones de JavaScript externas personalizadas
  • un buffer de stack, que proporciona un ArrayBuffer único para actuar como el montón de asm.js

Por lo tanto, su module debería ser básicamente así:

 function MyAsmModule(stdlib, foreign, heap) { "use asm"; // module body... return { export1: f1, export2: f2, // ... }; } 

Los parameters de function de su module permiten a asm.js llamar a JavaScript externo y compartir su memory intermedia de almacenamiento dynamic con JavaScript "normal". El object de export devuelto por el module permite que JavaScript externo llame a asm.js.

Deje fuera el "use asm" , y su browser no sabrá que debe interpretar su código como un module asm.js. Tratará su código como JavaScript "ordinario". Sin embargo, solo usar "use asm" no es suficiente para que su código sea interpretado como asm.js. No cumple con ninguno de los otros criterios mencionados anteriormente, y su código también se interpretará como JavaScript "ordinario":

enter image description here

Para get más información sobre asm.js, consulte p. Ej. El artículo de John Resig de 2013 o las especificaciones oficiales .

"use asm" es un pragma que le dice al motor de JavaScript específicamente cómo interpretarlo. A pesar de que es JavaScript válido y se puede usar sin el pragma, FireFox puede realizar optimizaciones adicionales para el subset Asm.js para boost el performance. Para hacer esto, debe saber que es Asm.js.