天地之灵

Lua.js,一个Lua2JS编译器,一个新的JS运行环境下的Lua方案

眼见为实,耳听为虚,先上live demo:
http://luajs.org

其实现在在js环境中运行lua代码的方案已经很多了,这些方案大都分为两类:
VM on VM:在js环境中移植或重新实现一个Lua VM。典型的代表是lua.vm.js和MoonShineJS。 这种方案的优势在于完整还原了整个标准lua,但主要缺陷在于,原本通过虚拟机执行的Lua VM效率就不理想,再通过JS运行,效率就更打一层折扣。
离线处理型:使用离线工具链将Lua语言翻译成JS。如LLVM-Lua 加上javascript backend,还有一个名为lua2js的项目。这个方案的优势在于能做一些较为深入的优化,缺点主要在于必须离线处理,不能直接在web上执行,或者体积庞大,以至于本身加载都需要较长时间。除此以外,只能离线处理 导致了字符串执行(如dostring等)的不可能实现,还会影响Lua中的package结构。

Lua.js采用一个不同的方案,它将lua代码转变为一个AST树,经过一系列的转换函数,最后产出一个合乎js标准的AST树,随后生成一个合法的js代码。因此转换后直接执行的代码,比VM on VM要快2-5倍,高效的执行速度有助于让你的应用或游戏展现流畅的极致体验。

另外,压缩后的Lua.js难以置信的小。这里是当前lua.js和lua.vm.js的对比:
文件大小 传输大小(gz压缩)
lua.js 22.7K 8.3K
lua.vm.js 638K 203K

尽管当前lua.js还有一些功能没有实现(如metatable、Lua标准库等),但可以预见全部实现后的尺寸也不会有大幅的增长,基本上不会超过30K/12K。

再谈论性能,这里使用了lua.vm.js官方的几个benchmark代码(稍做修改使得可以在当前版本的lua中运行)(lua.js和lua.vm.js均在chrome下运行),结果如下:

lua.js lua.vm.js lua 5.2.3 luaJIT 2.0.3 Scale What it measures
Binary Trees 8.526s 10.198s 4.006s 0.731s seconds (lower numbers are better) GC Performance
Scrimark 26.98 8.84 30.52 1249.73 MFLOPS (higher numbers are better) numeric computation performance

在当前版本中,GC仅仅比lua.vm.js略快,这是因为现在lua.js对于table模拟还处于较为原型的阶段,没有经过充足的优化。但即使这样也比lua.vm.js更快
而在数值计算上,性能远超lua.vm.js,逼近官方lua,这同样是在lua.js还没有经过充足优化的前提下。经过优化,完全有超过官方Lua的可能性。

lua.js的benchmark可以在http://luajs.org上找到,lua.vm.js的benchmark在 http://kripken.github.io/lua.vm.js/lua.vm.js.html

如果你对lua.js感兴趣,在这里可以下载独立的js文件:
https://github.com/tdzl2003/lua.js
lua.js尚处于不完善状态,如果你决定尝试使用,务必关注本项目的更新,及时替换更新的版本!

posted on 2014-11-05 20:17 天地之灵 阅读(9950) 评论(2)  编辑 收藏 引用

评论

# re: Lua.js,一个Lua2JS编译器,一个新的JS运行环境下的Lua方案 2014-11-06 06:36 天地之灵

http://luajs.org

2014/11/6更新:
已修复lua,js在and、or差异上导致的一系列问题。
已支持metatable。
已发布部分standard lib。 TODOs中列出的部分除外。欢迎调教。发现BUG欢迎提出issue。

https://github.com/tdzl2003/lua.js/blob/master/stdlib.lua

另外stdlib的完整源码发布在此处
可作为一个不错的使用参考  回复  更多评论   

# re: Lua.js,一个Lua2JS编译器,一个新的JS运行环境下的Lua方案 2015-02-03 12:25 cool

很酷!持续关注1  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


<2013年9月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

导航

统计

常用链接

留言簿(3)

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜