Ruby 核心开发团队在 12 月 25 日发布的 Ruby 3.2.0 ,做为开发者的圣诞礼物,其主要新功能包括初始 WebAssembly 支持和 YJIT(又一个即时编译器)的第一个非实验版本,与 Ruby 传统解释器性能有41%的提升。
YJIT 项目由 Shopify 发起,并得到 GitHub 的协助。如 Shopify 项目负责人 Maxime Chevalier-Boisvert 所说,Shopify 是“一家由 Ruby on Rails 提供技术支持的大型服务器基础设施公司”。
CRuby 已经有了一个名为 MJIT(基于方法的即时编译器)的 JIT 编译器,但 Chevalier-Boisvert 表示,“虽然它已经在较小的基准测试中实现了加速,但到目前为止,它在提供广泛使用的场合,加速方面不太满意”。
YJIT 基于称为 Basic Block Versioning 的 JIT 编译器架构,最初由 Chevalier-Boisvert 作为其博士研究项目的一部分。YJIT 项目的目标是“最终取代大部分执行的解释器”。目前,Ruby 3.2.0 同时支持 YJIT 和 MJIT。
YJIT 是 Ruby 的正式组成部分。根据维护者 Yui Naruse 在Ruby 3.2.0发布公告称,它“已经在生产工作负载上进行了一年多的测试,并被证明相当稳定”,因此已经宣布可以投入生产。它在 Linux、MacOS、BSD 和其他类 Unix 平台上运行良好,并支持 x86-64 和 Arm64 硬件架构。
一年前 YJIT 被移植到 Rust,原因是“在代码可维护性方面面临挑战。如大家所知,JIT 编译器可能会变得非常复杂,而 C99 没有提供很多工具来管理这种复杂性,” Chevalier-Boisvert这样说道。
Ruby 3.2.0 的另一大特性是基于 WASI 的 WebAssembly 支持。
“这使得 CRuby 二进制文件可以在 Web 浏览器、无服务器边缘环境或其他类型的 WebAssembly/WASI 嵌入设备上使用,”这是一种“Try Ruby”游乐场,它可以使用该技术在浏览器中运行 Ruby。目前,在支持方面还存在一些差距,因为“WebAssembly 本身缺少一些功能来实现 Fiber、异常和 GC,因为这个技术仍在发展,” 维护者 Naruse 说。
Ruby 3.2的 另一个新功能是 Regexp(正则表达式)算法升级,它可以将性能提高很多倍:Naruse 的一份实例显示了一个在 Ruby 3.1 中需要 10 秒的表达式,现在仅需要 0.003 秒就可运行完毕。
作者:场长
本文为 @ 万能的大雄 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。