为啥 LuaJIT 这么好?
Posted
技术标签:
【中文标题】为啥 LuaJIT 这么好?【英文标题】:Why is LuaJIT so good?为什么 LuaJIT 这么好? 【发布时间】:2011-06-22 03:46:34 【问题描述】:编辑:不幸的是,LuaJIT 在下面的链接中被排除在比较之外。
comparison 的编程语言表明 LuaJIT 比普通的 Lua 实现有十倍以上的改进。 为什么变化如此之大? Lua 是否有一些特定的东西使它从 JIT 编译中受益匪浅? Python 也是动态类型化并编译为字节码的,那么为什么 PyPy(我相信现在有 JIT)没有表现出如此大的性能提升?
【问题讨论】:
简单的答案:Mike Paul 是神 :) 【参考方案1】:Mike Pall 在几个地方谈到了这一点:
http://article.gmane.org/gmane.comp.lang.lua.general/58908 http://lambda-the-ultimate.org/node/3851 http://www.reddit.com/user/mikemike与每个高性能系统一样,最终的答案归结为两件事:算法和工程。 LuaJIT 使用先进的编译技术,并且它也有一个非常精细的实现。例如,当花哨的编译技术无法处理一段代码时,LuaJIT 会退回到用 x86 汇编编写的非常快速的解释器。
LuaJIT 在工程方面获得双分,因为不仅 LuaJIT 本身设计精良,而且 Lua 语言本身的设计比 Python 和 javascript 更简单、更连贯。这使得实现更容易(稍微)提供始终如一的良好性能。
【讨论】:
LuaJIT 无疑是优秀算法和优秀工程的典范。那个(或这个)读起来像营销文本是无关紧要的。汇编中的手动编码解释器循环比 C 版本的解释器快得多,这是良好工程的示例。别名分析、存储接收、负载转发、nan-tagging、寄存器分配和高效的跟踪组合/退出是优秀算法(和工程)的例子。以上是关于为啥 LuaJIT 这么好?的主要内容,如果未能解决你的问题,请参考以下文章