Ruby 已合并新的即时编译器 ZJIT


ZJIT 是一个新的即时编译器(JIT),由与开发 YJIT 的同一编译器团队构建到参考 Ruby 实现 YARV 中,该工具目前已合并到 Ruby。

相关阅读

Ruby 引入新 JIT 编译器 RJIT,替代 MJIT

Ruby 的新 YJIT 编译器已完成,使用 Rust 重新实现

ZJIT 在多个方面与 YJIT 有所不同:

  • 它不是直接将 YARV 字节码编译成低级中间表示(LIR),而是使用基于高级单赋值(SSA)的中间表示(HIR)
  • 它不是一次编译一个基本块,而是每次编译一个完整的方法
  • 它不是使用懒惰基本块版本化(LBBV)来分析类型,而是从已分析的解释器中读取历史类型信息
  • 与在将 YARV 降低到 LIR 时进行优化不同,它有一个工作在 HIR 上的高级模块化优化器

从高层次来看,ZJIT 接收 YARV 字节码,构建中间表示(IR),进行一些优化,并生成机器码。简化来说,它看起来像这样:

以下示例为 Ruby 程序通过完整的编译器管道:

# add.rb
def add(left, right)
left + right
end

p add(1, 2)
p add(3, 4)

相關推薦

2023-03-11

一个关于合并 RJIT 的 PR。 据介绍,RJIT 是新的 JIT 编译器,用作 MJIT 的替代实现。主要特性如下: RJIT 使用纯 Ruby 汇编程序生成原生代码 MJIT 在运行时需要 C 编译器,YJIT 在构建时需要 Rust 编译器。RJIT 不需要它们

2022-04-21

责此项目的开发者表示已完成了使用 Rust 实现的 Ruby YJIT 编译器,可有效取代现有的 C 版本,目前正在等待上游合并。 据介绍,Rust 版本的 YJIT 编译器与 C 版本具有相同的水平,因为它通过了所有的 CRuby 测试,也能够运行所有 Y

2023-04-01

out 参数 为Ruby 3.2 使用 URI-0.12.1 by hsbt · Pull Request #7603 合并 RubyGems-3.4.10 和 Bundler-2.4.10 by hsbt · Pull Request #7479 合并 Time-0.2.2 by hsbt · Pull Request #7623 更多详情可查看发布说明。

2023-01-13

带来了实时聊天和用户状态、可定制的侧边栏,以及一个新的通知界面,此外还有大量改进。 新的设置向导 添加了一个新的设置向导,通过简单的切换可以立即配置一些最重要的功能。 实时聊天 Discourse 现在包括实时聊天

2023-09-26

性。 需要注意的是,群组级别的权限与面板级别的权限合并方式是合并而不是覆盖,这意味着如果开启了群组的权限,那么不论面板权限是否开启权限该用户都是有相关权限的 在本次更新后默认的群组权限将会丢失,这

2022-07-15

语言运行时和工具 Rocky Linux 9 拥有许多最新的运行时和编译器,包括 GCC 11.2.1、LLVM(13.0.1)、Rust(1.58.1)和 Go(1.17.1)。 Rocky Linux 9 有更新的开发者工具链版本,包括 GCC(11.2.1)、glibc(2.34)和 binutils(2.35)。GCC 编译器的

2023-04-16

到 PCRE,如果 PCRE2 在编译时不可用则自动回退,或者通过编译器标志 -Duse_pcre 回退。 从 1.8 开始,Crystal 编译器应使用 PCRE2 构建以确保一致性。 作为简化向 PCRE2 迁移的措施, Regex::Options 获得了更多可在两个引擎版本中

2023-12-26

a 作为解析器生成器,添加了一个名为 RJIT 的新纯 Ruby JIT 编译器,以及许多性能改进,尤其是 YJIT。 具体更新内容如下: Prism 引入 Prism 解析器作为默认 gem Prism 是一个可移植、容错且可维护的 Ruby 语言递归下降解析

2023-05-15

uby 3.3 最重大的改动是添加了一个名为 RJIT 的新纯 Ruby JIT 编译器,使用 Lrama 作为解析器生成器,并带来许多性能改进。 RJIT Ruby 3.3.0-preview1 引入纯 Ruby JIT 编译器 RJIT 替换了 MJIT。与 MJIT 不同,RJIT在运行时不需要 C 编译器。 有

2023-01-11

点文字,该数字语法已被破坏,且不是很有用 (#12687) 编译器 ⚠️ 过时的 FreeBSD 11 兼容性已被删除 (#12612) 标准库 ⚠️ File.real_path 更名为 File.realpath, 旧版本已弃用,但在下一个主要版本之前一直有效  (#12552)

2023-07-19

局类型推理算法来解决。 Crystal 1.9.0 包含许多改进: 编译器和标准库改进了对 Windows 的支持 GUI 安装程序和 DLL 动态链接已到达可用状态 语法新增了两个宏ASTNode#warning和::print 文档生成器支持深色模式 以及改进对小型 v

2022-04-02

龙芯的 LoongArch 移植,现在这些代码已被正式合并到 GCC 编译器。 在 GCC 12 开发周期的"stage four"的最后阶段,龙芯的 LoongArch 移植已经被合并了,其将在大约一个月后发布稳定版。据称,由于新的 CPU 移植不会对现有的编译器代

2022-09-30

ature 最好以自适应的方式实现,如果在系统上检测到 Rust 编译器,则 Kconfig 将启用 Rust 支持,并继续构建任何假定的 Rust 内核代码,以至少查看其是否正确构建。 2020 年 LPC (Linux Plumbers Conference) 大会上,内核开发者基本达成共

2023-01-15

内存量。这可以提升游戏的 FPS,或者带来更快的模拟和编译器运行。 zram 是一个 Linux 内核模块,用于在 RAM 中创建一个压缩块设备,即一个具有即时磁盘压缩的 RAM。zram 不会将不频繁使用的数据移到磁盘上的一个单独的交换