Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2727|回复: 1
打印 上一主题 下一主题

asm.js

[复制链接]

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
跳转到指定楼层
楼主
发表于 2015-8-3 10:04:27 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
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++类型的数值计算,就要模拟各种类型数据计算时的溢出效果。








回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-11 03:28 , Processed in 0.059679 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表