asm.js对编译器的限制

时间:2013-04-12 13:22:17

标签: javascript performance compiler-construction emscripten

我想知道asm.js规范中是否有任何“设计限制”会阻止任何编译器直接从它生成本机汇编代码。

现在firefox的速度似乎是本机代码的一半,但我想知道它为什么不以原生速度运行。在我看来,asm.js很像很多..

2 个答案:

答案 0 :(得分:2)

此限制目前使用Typed Array类型的Javascript作为内存(堆栈)。这是因为其他脚本与您的asm.js生成的Javascript交互,并且需要共享的“内存”空间。 此外,我猜Typed Array被实现为实际堆内存,这将比使用堆栈慢。

答案 1 :(得分:1)

因为Firefox的编译器不像C编译器那样进行任何有益于asm.js代码的优化。 在Windows上,也因为已编译的代码必须执行数组访问的边界检查(在其他操作系统OdinMonkey上,Firefox的asm.js编译器使用内存保护)。