您已经描述了它是什么。用途是它是一种适用于所有浏览器的低级语言,在大多数浏览器中速度非常快,而在某些浏览器中速度非常快。与其他任何编程语言一样,您所做的工作是开放式的。
Mozilla似乎最热衷的用例是:通过Emscripten,已经有将LLVM后端(主要是C和C ++)的语言编译为JavaScript的方法。asm.js与Emscripten已经发出的代码非常接近,因此这使Emscripten代码(在当今的JavaScript JIT编译器中已经非常快)变得更快,从而进一步实现了将现有代码库移植到Web的目标。再次,您将其用于什么才是您的决定。移植游戏是一种用例(Mozilla显然参与其中),但是有无数用C和C ++编写的东西,其中许多对于某人的网站可能会派上用场。我见过一些(加上我自己的一些设计),但不能保证可行性:
- 移植通用算法(例如zlib,libjpeg,openssl,FFT实现)以使JavaScript /网站能够执行更多操作,而不必创建新的Web标准,也无需依靠各个浏览器来实现它。
- 移植解释器,以使JavaScript以外的其他语言也可以在浏览器中运行,而开销却更少,移植工作量也最小。
- 使用asm.js作为更多编译器的后端,尤其是那些不能很好地映射到JavaScript并且不需要其大部分功能和开销的编译器。一个示例可能是设计用于快速数字运算而无需分配内存的语言。
- 使用asm.js 在 JavaScript中创建JIT 。它可以完全实现任何语言-例如ActionScript。
- 同样,将现有的JIT编译器移植到浏览器中运行(请参阅移植解释器,与JS相比实际上没有开销)。这可能仅在像PyPy一样自动生成JIT编译器时才可行。