firemail

标题: asm.js [打印本页]

作者: hechengjin    时间: 2015-8-3 10:04
标题: asm.js
asm.js项目地址:https://github.com/dherman/asm.js
asm.js是一个JavaScript的一个严格的子集,可以被用来作为一个底层的、高效的编译器目标语言。asm.js提供了一个类似于C/C++虚拟机的抽象实现,包括一个可有效负载和存储的大型二进制堆、整型和浮点运算、高阶函数定义、函数指针等。



asm.js是JavaScript的一个子集,也就是说,你可以将基于asm.js的程序放在一个标准的未修改的浏览器或JavaScript引擎中运行。但是,如果要想获得更高的效率,就需要使用一个优化的JavaScript引擎来运行。这是Mozilla接下来要考虑的事情。Mozilla目前正在开发OdinMonkey,这是一个JavaScript引擎,该引擎在处理asm.js程序时,可以自动进行优化。
  Mozilla还展示了一项基准测试数据,结果显示,Firefox+asm.js的执行速度仅次于本地应用。

另外,IE和Chrome都将支持asm.js。[1]
在Microsoft Edge中,用户可以在about:flags中找到启用asm.js的选项

asm.js是由Mozilla提出的一个基于JS的语法标准,主要是为了解决JS引擎的执行效率问题,尤其是使用Emscripten从C/C++语言编译成JS的程序的效率,目前只有Mozilla的Firefox Nightly中支持。
EmscriptenEmscripten是Mozilla的一个实验性项目,目的是把C/C++开发的应用编译成JS或HTML5的应用,编译过程中需要首先把C/C++程序编译成LLVM的中间代码,然后再转换成JS代码,这样做的主要原因是可以很好地复用现有的针对LLVM的优化。
C/C++是一种强类型的语言,这很好地对应了不同字长的CPU指令,每一种数据类型都有固定的上下限,一旦计算超出这个上下限就会产生溢出,比如char类型的取值范围是[-128,127],而(char)(127 + 1)这个计算就会溢出,得到(char)-128。
JS语言不仅是弱类型的,而且数值类型只有一种-Number,Number类型的数据采用双精度64位格式的IEEE 754值表示。如果用JS模拟C/C++类型的数值计算,就要模拟各种类型数据计算时的溢出效果。









作者: wmztvl    时间: 2016-5-8 09:56
楼主高人啊,我先收藏了












16楼影院 www.9edy.com/16lou.html




欢迎光临 firemail (http://firemail.wang:8088/) Powered by Discuz! X3