17611538698
info@21cto.com

Ruby 发明者 Matz 正在借助 AI 开发本地编译器

图片

导读:Matz 与 Anthropic 的 Claude 合作,为 Ruby 创建了一个实验性的提前编译器——尽管它有很多局限性。

Yukihiro Matsumoto(松本幸弘,他更为人熟知的名字是 Matz)正在借助Anthropic 的 Claude Code ,构建 Ruby 的原生编译器—— Spinel。

而 Spinel 是一个基于 MIT 许可证、发布在 GitHub 上的开源项目。地址为:

https://github.com/matz/spinel

图片

它的工作原理是将 Ruby 代码解析成 AST(抽象语法树)文件,然后将其转换为 C 代码,以便使用标准的 C 编译器进行编译。

在 Matz 公布的测试数据中,使用 Spinel 编译的代码运行速度比 MiniRuby(一个精简版的 Ruby 构建版本)快约 11.6 倍,测试环境为正在开发中的 Roby 4.1.0。 

输出结果是 C 代码,可通过 Linux 或 Windows 上的 gcc(GNU 编译器集合)编译成本地可执行文件(需配合 MinGW - Minimalist GNU for Windows 使用),或通过 Linux 或 macOS 上的 LLVM 的 Clang 编译成可执行文件。

根据其自述文件,BSD 系统“基本可以运行”,但尚未经过完整测试。

Ruby 是一种解释型语言,这意味着它依赖于运行时引擎来解析和运行代码。为了提高性能,Ruby 可以使用即时 (JIT) 编译器,包括 MJIT(基于方法的 JIT)、YJIT 和 ZJIT,其中后两者由知名的 Ruby 用户 Shopify 开发。Spinel 的不同之处在于,它可以生成独立的本地代码可执行文件,无需任何额外的运行时即可部署。

Spinel 的当前缺点是它仅支持 Ruby 的一部分功能。不支持的功能包括 eval 语句(用于在运行时评估和执行 Ruby 代码)、线程、UTF-8 以外的文本编码、元编程(例如在运行时定义方法)以及深度嵌套的 lambda 函数。

虽然 Ruby 对象是强类型的,但 Ruby 变量本身并没有类型。Spinel 会进行类型推断以生成 C 代码,因为 C 语言是强类型语言。该代码使用了成熟的 Ruby 解析器 Prism。Spinel 进行了多项优化,例如方法内联和死代码消除,生成的 C 代码在默认警告级别下可以顺利编译。Spinel 内置了垃圾回收器,可以自动回收内存,并支持 FFI(外部函数接口),以便与 libc 或 SQLite 等本地代码库集成。

Spinel 项目仍处于实验阶段,无法与大多数现有的 Ruby 代码兼容,包括 Web 应用框架 Ruby on Rails。但 Ruby 开发者可以编写一些以 Spinel 为目标的代码,例如编写一些辅助函数,然后从其他 Ruby 代码中调用这些函数,以此作为优化手段。

Matz 上个月在日本函馆举行的 RubyKaigi 2026 大会上展示了 Spinel 项目。据与会者geeknees透露,Matz 表示 Spinel 的构想早在三年前就已萌发,但现在仅用了几周时间就利用人工智能技术将其实现了。 

Spinel 代码库中的大部分代码都以注释开头,其中包括“共同作者:Claude Open 4.7(1M 上下文)”。 

此外,据称该项目已经过三次重构,进行了一系列测试与实验。

Matz 或许是人工智能生成代码的最理想用户。因为什么呢?首先他深度理解代码,既能享受开发速度提升带来的好处,又不会忽略代码的功能,还能凭借现有技能以及人工智能的进一步提示来完善代码,而且代码经过了数百项测试和基准测试。

作者:洛逸

参考:

https://zenn.dev/geeknees/articles/edc3cb36ea251c?locale=en

评论

我要赞赏作者

请扫描二维码,使用微信支付哦。

分享到微信