17611538698
webmaster@21cto.com

Ruby 3.2.0 发布,带有 WebAssembly 编译器、生产环境就绪的 YJIT 优化与更快的正则表达式引擎

编程语言 0 742 2023-01-08 11:09:17

图片

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 秒就可运行完毕。

作者:场长

评论