LuaJIT是什么

Fanly 问答 2022-12-09 02:42:10 阅读(...)

LuaJIT 是采用 C 语言写的 Lua 代码的实时跟踪编译器。LuaJIT 已被成功地用作游戏,设备,网络和图形应用程序,数字模拟,交易平台和许多其他专业应用程序中的脚本中间件。

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),检查假设是不是对的,如果不对,就会跳转出去,再根据情况,来决定要不要再编译一段新的机器码,来适配新的情况。

0个人收藏 收藏

评论交流

泪雪默认头像 请「登录」后参与评论
  1. 加载中..

相关推荐

  • 编译器 compiler

    什么是编译器

    编译器是指从高级语言到低级语言的翻译器,同样的技术可用于不同种类语言之间的翻译,编译器是一种电脑程序,它会将用某种编程语言写成的源代码(原始语言),转换成另一种编程语言(目标语言)。
  • C language C 语言

    c语言编译器有哪些

    C语言编译器有Dev-C++,只需要简单配置一下就能够在上面进行编写程序;vs code一款跨平台免费开源编辑器;Visual Studio插件扩展众多,支持单元测试、代码重构等高级功能,开发调试效率都非常高,大型项目开发经常会用这个软件。
  • Lua

    Lua是什么意思

    Lua 是一个简洁、轻量、可扩展的脚本语言。Lua 由标准 C 编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua 在葡萄牙语中的意思是月亮。
  • 多态 polymorphism

    什么是多态

    多态字面的意思就是“多种状态”,在面向对象语言中,接口的多种不同的实现方式即为多态,多态指同一个实体同时具有多种形式,它是面向对象程序设计(OOP)的一个重要特征,如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。
  • OpenResty

    OpenResty是什么

    OpenResty(ngx_openresty)是一个基于Nginx与Lua的高性能Web平台,其内部集成了大量精良的Lua库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态Web应用、Web服务和动态网关。
  • 操作系统 operating system

    操作系统有哪些

    主流的操作系统有Windows操作系统,Linux操作系统,Unix操作系统和Mac操作系统;除此之外还有DOS操作系统,NetWare操作系统,FreeBS系统,Chrome OS操作系统。