LOADING

LuaJIT是什么

百科2年前 (2023)发布 杨帆舵手
127 0 0
广告也精彩
欢迎指数:
参与人数:

LuaJIT 是采用 C 语言写的 Lua 代码的实时跟踪编译器。LuaJIT 已被成功地用作游戏,设备,网络和图形应用程序,数字模拟,交易平台和许多其他专业应用程序中的脚本中间件。它从嵌入式设备,智能手机,桌面到服务器农场。它结合了高灵活性、高性能和无与伦比的低内存占用。

LuaJIT

自 2005 年以来,LuaJIT 一直在不断发展。它被广泛认为是最快的动态语言实现之一。自从第一次发布以来,它在许多跨语言基准测试中表现优于其他动态语言,通常情况下还是有很大的优势。

对于 LuaJIT 2.0,整个虚拟机已经从头开始重写,并对性能进行了无情的优化。它将用汇编语言编写的高速解释器与先进的 JIT 编译器相结合。

一个创新的跟踪编译器集成了先进的基于 SSA 的优化和高度调整的代码生成后端。与动态语言相关的开销的大幅度降低使得它可以打破传统上为离线静态语言编译器保留的性能范围。

LuaJIT 并不是直接将 lua 转为机器码,而是先以 LuaJIT 的 bytecode 在 runtime 中 iterpreter 模式运行,iterpreter 运行中发现某段代码经常被执行就会开启记录模式,记录这段代码的细节,推测变量的类型,记下来->SSAIR->机器码。

以 trace compiler 方案推测着运行机器码,用固定的内存访问而不是查表操作,所以速度更快。

LuaJIT 为了极限级的性能,就会大胆进行假设,如果发现 a+b 就是两个数值相加,就编译出数值求和的机器码。

但是如果某一时刻 a+b 不是数值相加,而是变成了两个表相加呢?这机器码岂不是就导致错误了?因此每次 LuaJIT 做了假设时,都会加上一段守护代码(guard),检查假设是不是对的,如果不对,就会跳转出去,再根据情况,来决定要不要再编译一段新的机器码,来适配新的情况。

此站内容质量评分请点击星号为它评分!

您的每一个评价对我们都很重要

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

© 版权声明
广告也精彩

相关文章

广告也精彩

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...