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


Ruby 代码仓库近期新增了一个关于合并 RJIT 的 PR。

据介绍,RJIT 是新的 JIT 编译器,用作 MJIT 的替代实现。主要特性如下:

  • RJIT 使用纯 Ruby 汇编程序生成原生代码
    • MJIT 在运行时需要 C 编译器,YJIT 在构建时需要 Rust 编译器。RJIT 不需要它们
    • 这意味着 RJIT 的预热可能比 YJIT 慢,但仍然比 MJIT 快得多
  • RJIT 生成的代码看起来与 YJIT 非常相似
    • 事实上,很多方法都是将 Rust 代码直接翻译成 Ruby
    • 因此能够通过删除特定于 MJIT 的实现来简化 Ruby VM
    • 如果需要,还可以在 RJIT 中为 YJIT 做一些早期实验

关于 RJIT 的更多信息,查看 [Feature #19420]

部分性能基准测试如下:

Headlining Benchmarks

MicroBenchmarks

其他基准测试


相關推薦

2023-05-15

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

2023-12-26

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

2022-12-26

存页在 JIT 代码实际使用之前不会映射到物理内存页。 引入 Code GC,当 JIT 代码的内存消耗达到--yjit-exec-mem-size时,释放所有代码页。 RubyVM::YJIT.runtime_stats在现有的inline_code_size和outlined_code_sizekeys 之外,还返回 Code GC metrics: cod

2022-04-21

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

2023-07-08

、字节码内联缓存、协程的即时评估,以及实验性字节码编译器,该编译器使用类型注释来生成在 JIT 中性能更好的类型专用字节码。 Cinder 为 Instagram 提供后端支持,并在 Meta 中越来越多的 Python 应用程序中使用。 ​根据 Thread

2022-05-19

常用执行环境及一系列标准组件。 主要变化 stdlib 引入新函数filelib:ensure_path/1,用于确保给定路径的所有目录都存在 为maps模块引入新函数groups_from_list/2和groups_from_list/3 为listsmodule模块引入新函数uniq/1 uniq/2 将新的

2023-05-18

。这使得 Windows Erlang 终端体验与 Unix 保持一致。 优化编译器和 JIT 已优化具有固定大小 segment 的二进制文件的创建和匹配 优化 UTF-8 segment 的创建和匹配 对添加到二进制文件的优化 编译器和 JIT 现在生成更好的代码来

2022-05-19

尽可能地减少 Python 代码和 C 代码。 至于饱受期待的 JIT 编译器,Shannon 表示实现 JIT 的第一步是实现一个跟踪解释器,但目前还有太多需要关注的项目,引入 JIT 编译器的工作还有一段路要走,“最早可能要到 3.13 才能到达”。

2022-11-18

0.187 更新性能监控工具: PCP 5.3.7 Grafana 7.5.13 编译器更新: GCC 工具集 12 LLVM 工具集 14.0.6 Rust 工具集 1.62 Go 工具集 1.18 最小 ISO 变化: OpenSCAP 配置文件在安装期间可用(albz#94 ) rsyslog 包现在是最小安装类

2022-11-21

括 node.js 18、mercurial:6.2、maven:3.8 和 ruby​​:3.1。 新的编译器工具集版本包括 GCC 12、LLVM 14.0.6、Rust 1.62 和 Go 1.18。 httpd 中 LimitRequestBody 指令的默认值已从无限制更改为 1GiB,以修复 CVE-2022-29404。 SSSD 现在支持与 Windows Server 202

2023-01-07

in-db 和 [ronin-db-activerecord] 使用 ronin-repos 替代所有仓库管理相关的代码 使用 [command_kit] 和 ronin-core 替代 CLI 代码 重构 ronin gem 包,现在仅提供包含子命令的 top-level CLI,并要求使用其他ronin- g

2022-09-29

,开发团队表示它是当今可用的最兼容的 Python 实现替代方案之一,Pyston 支持 CPython 的所有功能和 C API。

2022-05-08

态分析器和 JIT 库。 GCC 12.1 的一些亮点包括: 继续为编译器和 C++ 标准库分别支持 C2X 和 C++23 以及 C 和 C++ 的下一版本。C2X 和 C++23 支持仍被视为实验性的。C++20 libstdc++ 支持也得到了改进,但仍处于试验阶段。 GCC 12 支持新 I

2023-10-21

型语言标准库中存在的系统调用。 目前,Ruvy并未随预编译的二进制文件一起发布,因此需要安装它的构建依赖项,然后编译Ruvy才能使用。 安装这些依赖项的详细信息请查看README。 构建Ruvy后,可以运行以下命令来打印出 Hel