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


去年 12 月,Ruby JIT 团队的成员提出,希望将 YJIT 代码库从 C99 移植到 Rust。虽然有不少开发者对此持保留意见,但这个项目最终得到了 Ruby 核心开发者以及创始人 Matz 的批准。

昨日,负责此项目的开发者表示已完成了使用 Rust 实现的 Ruby YJIT 编译器,可有效取代现有的 C 版本,目前正在等待上游合并。

据介绍,Rust 版本的 YJIT 编译器与 C 版本具有相同的水平,因为它通过了所有的 CRuby 测试,也能够运行所有 YJIT 基准测试,并且性能与 C 版本基本一致(它以相同的方式运行,并且基本生成了相同的机器代码)。此外,开发团队还加入了一些设计改进,例如更细粒度的常量失效机制,预计这将在 Ruby on Rails 应用程序中发挥巨大作用。

默认情况下,YJIT 不会被编译,也不需要 cargo/rustc。如果 YJIT 在 dev 模式下构建,则cargo用于获取开发依赖项,但在 release 中构建时,cargo不是必需的,只需要有rustc。目前 YJIT 要求使用 Rust 1.60.0 或更新的版本。

按照计划,Rust YJIT 将被编译并包含在 Ruby 3.2 版本的系统包和编译二进制文件中。开发团队称,预计不会出现任何重大问题,因为 Rust 在 YJIT 支持的每个平台上都得到了很好的支持。


相關推薦

2023-12-26

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

2023-03-11

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

2023-05-15

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

2022-12-26

使得大多数 Regexp 匹配(实验中大约为 90%)在线性时间内完成。 对于 3.2.0 预览版本的用户:此优化可能会消耗与每个匹配的输入长度成比例的内存。预计不会出现实际问题,因为此内存分配通常会延迟,并且正常的 Regexp 匹配

2023-04-01

错误 #19471:Regexp::compile 不处理 :timeout 参数 为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 更多详情可查看发布说明。

2022-12-23

量,而且目前也没有关于 Rust 发展方向的策略。 重写编译器 Nick 认为,Rust 目前的架构已经难以支持实现增量编译、并行编译等功能。重新开始则可以使用上更多的技术,团队可以通过这种机会认真优化编译时间,简化未

2023-01-19

实践创建新项目并与平台整合,或是发布生产构件供店家使用。不过 Shopify CLI 开发团队发现,对构建 Shopify 应用程序的开发者来说,他们在使用 CLI 上一直存在部分体验问题,因此决定重新审视 CLI 的开发语言选择,希望做出一

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-11-15

员于 2007 年推出,一直广受欢迎。它简单、易用,能快速完成任务。Go 深受 C 语言的影响,但在内存安全、垃圾收集和结构类型方面也有重大改进。 平均工资:~$130k 薪资中位数:$128k 发现的工作数量(带薪水):1.2K 个

2022-05-24

器-ppp 打开 vSwitch:networkmanager-ovs 新功能和值得注意的新软件包 修复了使用控制台将驱动程序编译为模块时不显示引导输出的问题 OpenRC 输出会显示在 VirtIO 串行控制台上。 SDL 1.2 迁移到 SDL 1.2 兼容 旧的 sdl 包 (SDL 1.2)

2023-04-24

多业务性的逻辑是需要创造力和编程心流体验的, 而Rust编译器总是打断你方向性的思考, 强制让你关注设计阶段不重要的细节, 丧失了很多编程乐趣。 2. Rust社区的人似乎不懂得市场经济和成本概念, 一个好的软件, 不仅

2024-06-13

 Ruby 3.3.3 现已发布,本次发布包括: RubyGems 3.5.11 Bundler 2.5.11 REXML 3.2.8 strscan 3.0.9 --dump=prism_parsetree被替换为--parser=prism --dump=parsetree 无效的编码符号会引发SyntaxError而不是EncodingError 修复了 Ripper 解析过程中的内存

2023-11-24

。 Rocket v0.5部分重要新功能包括: 支持稳定的Rust编译器:Rocket v0.5基于Rust稳定版本进行编译和构建,开发者现在可以使用稳定发布通道中的rustc编译和构建 Rocket 应用程序,不再需要使用#![feature(..)]crate 属性。  

2022-09-30

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