Escribir JS optimizado para asm.js

Hay bastante emoción en asm.js y en cómo será capaz de ejecutar algunas aplicaciones muy pesadas. Sin embargo, está comstackdo a partir del código C ++. ¿Todavía es posible get el beneficio de las mejoras actuales sin conocer C ++ u otros lenguajes de bajo nivel?

Aquí está la idea que tuve: ¿es posible que podamos escribir el código en Js, que recompilemos para asm.js para la optimization?

Sin embargo, está comstackdo a partir del código C ++.

No lo es. Es un lenguaje Cualquier progtwig puede emitir files de text que contengan código asm.js. Emscripten comstack LLVM IR en asm.js, y hay comstackdores de C y C ++ a LLVM IR, pero esta es solo una forma posible de get el código asm.js. Es cierto que actualmente es la forma más madura, práctica y popular, pero no me sorprendería en absoluto si otros comstackdores asm.js para otros idiomas aparecen en algún momento en el futuro.

¿Todavía es posible get el beneficio de las mejoras actuales sin conocer C ++ u otros lenguajes de bajo nivel?

Bueno, en teoría, cualquier lenguaje que pueda comstackrse eficientemente para código de máquina antes de time se puede implementar de manera eficiente usando asm.js, y eso incluye algunos de alto nivel (por ejemplo, Haskell). Pero actualmente, nadie tiene una implementación que funcione, y no espero que esto llegue a ser muy popular. En este momento, si quieres el performance de asm.js, probablemente escribirías código C o C ++ y lo comstackrías en asm.js, sí.

Tenga en count que lo anterior excluye (entre muchos otros) Javascript. El hecho de que asm.js sea un subset de Javascript es conveniente porque el código asm.js se ejecutará en browseres no modificados, pero no es de mucha utilidad para cualquiera que escriba Javascript. asm.js es básicamente una capa delgada sobre el código de la máquina, con algunas modificaciones para la security y la interoperabilidad de JS. Comstackr JS en asm.js es tan difícil como comstackrlo en código de máquina: fácil si no le importa un comino el performance (solo se usan siempre los valores encriptados dinámicamente como un intérprete y se emiten llamadas a las funciones de la biblioteca en time de ejecución), muy difícil cuando lo haces

De hecho, después de décadas de investigación sobre el tema, todavía no hay un ejemplo de un lenguaje altamente dynamic como JavaScript, Ruby o Python comstackdo en el código de la máquina antes de time y funcionando mucho más rápido que un intérprete inteligente. La compilation justo a time, por otro lado, es muy práctica, pero los principales motores JS ya lo hacen, de una forma less indirecta que la compilation a asm.js, luego la analizan de nuevo y la comstackn en código máquina.

Si tiene una function pequeña que es muy pesada en cuanto a cómputo (procesando numbers en lugar de manipular DOM) podría reescribirla en el estilo asm.js usted mismo, manualmente. Es posible ( lo he hecho ), pero tedioso.

Hay otros comstackdores asm.js, por ejemplo, LLJS que puede usar en lugar de C ++.

Sin embargo, asm.js no es magia. Solo obtendrá beneficios de performance cuando use un lenguaje que sea mucho más adecuado para la optimization anticipada que JS. No puede tomar JS con todas las funciones y hacerlo más rápido ejecutando JS VM en la parte superior de JS VM, del mismo modo que no puede hacer que los files ZIP sean más pequeños comprimiéndolos.

Asm.js no es un lenguaje separado, sino un subset de Javascript. Es solo Javascript con un montón de performance. Esto significa que no necesita aprender otro idioma, aunque en este caso conocer C / C ++ podría ser útil para entenderlo.

Asm.js es un subset muy estricto de JavaScript, que se puede generar con relativa facilidad cuando se comstack desde C / C ++ a JavaScript. El código Asm.js está mucho más cerca del código máquina que el código JavaScript normal, lo que permitió a los browseres optimizar mucho para cualquier código escrito en asm.js. En los browseres que implementaron esas optimizaciones, su código normalmente ejecutará aproximadamente el 50% de la velocidad de un progtwig C / C ++ que se comstack en código máquina … que puede parecer lento, pero es muchísimo más rápido que cualquier JavaScript normal. !

Sin embargo, precisamente porque está optimizado para máquinas en lugar de para humanos, asm.js es prácticamente imposible de usar por cualquier desarrollador humano … a pesar de que es solo JavaScript. Si bien es técnicamente posible convertir – al less un subset de – JavaScript común a un equivalente de asm.js, dicha conversión no es una tarea fácil y aún no he encontrado ningún proyecto que haya intentado lograrlo.

Hasta que alguien realice una tarea tan hercúlea, el mejor método para producir el código asm.js sigue siendo escribir el código en C / C ++ y convertirlo a JavaScript.

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