Ya describiste lo que es . El uso es que es un lenguaje de bajo nivel que funciona en todos los navegadores, es bastante rápido en la mayoría y muy rápido en algunos. Lo que haces de esto es tan abierto como lo que haces con cualquier otro lenguaje de programación.
El caso de uso que Mozilla parece más interesado es el siguiente: ya existen formas de compilar lenguajes con backends LLVM (principalmente C y C ++) a JavaScript, a través de Emscripten. asm.js está muy cerca de lo que Emscripten ya emite, por lo que esto permite que el código de Emscripten (que ya es impresionantemente rápido en los compiladores JavaScript JIT de hoy en día) se vuelva aún más rápido, promoviendo el objetivo de portar bases de código existentes a la web. Nuevamente, para qué exactamente usa esto es su decisión. Portar juegos es un caso de uso (en el que Mozilla aparentemente participa activamente), pero hay innumerables cosas escritas en C y C ++, algunas de las cuales podrían ser útiles para el sitio web de alguien. Algunos que he visto arrojados (más algunos de mi propio diseño), sin garantía con respecto a la viabilidad:
- Portar algoritmos de propósito general (p. Ej., Zlib, libjpeg, openssl, implementaciones de FFT) para permitir que JavaScript / sitios web hagan más, sin tener que crear un nuevo estándar web y dependiendo de los navegadores individuales para implementarlo.
- Portar intérpretes, para que otros lenguajes que no sean JavaScript puedan ejecutarse en el navegador, con menos sobrecarga y un mínimo esfuerzo de portabilidad.
- Usar asm.js como back-end para más compiladores, especialmente aquellos que no se asignan bien a JavaScript y no necesitan la mayoría de sus características y gastos generales. Un ejemplo podría ser un lenguaje diseñado para un trabajo numérico rápido sin asignación de memoria.
- Usando asm.js para crear un JIT en JavaScript. Puede implementar cualquier lenguaje, por ejemplo, ActionScript .
- En la misma línea, portar los compiladores JIT existentes para que se ejecuten en el navegador (cf. portar intérpretes, con una sobrecarga efectiva nula sobre JS). Esto probablemente solo sea factible cuando los compiladores JIT se generan automáticamente, como con PyPy.