Spinel:Matz 亲手打造的 Ruby AOT 原生编译器

查看原文 HN 讨论

文章摘要

Spinel 是 Ruby 之父 Matz(松本行弘)发布的一款实验性 AOT(Ahead-of-Time)编译器,能把 Ruby 源代码编译为独立的原生可执行文件。它的工程定位非常务实——不是要”再造一个 Ruby”,而是要让 Ruby 在不需要解释器、不需要运行时依赖的前提下跑得更快。项目本身具有一个鲜明特征:自举(self-hosting)——编译器后端用 Ruby 写成,自身被 Spinel 编译为原生二进制。

技术管线分三步:

  1. 解析:使用 libprism 解析 Ruby 源代码并将 AST 序列化。
  2. 代码生成:执行整体程序的类型推断(whole-program type inference),输出优化后的 C 代码(这一步是用 Ruby 自举实现的)。
  3. 编译:用标准 C 编译器把 C 代码编译为可执行文件,运行时只依赖 libc 和 libm。

性能方面 Spinel 的成绩相当扎眼。在 28 个基准测试中,几何平均比 miniruby 快约 11.6 倍;在计算密集型基准上拉得更开:康威生命游戏 86.7×,Ackermann 函数 74.8×,Mandelbrot 58.1×。即便是更接近实际负载的 JSON 解析(10.1×)、模板引擎(6.2×)、光线追踪(8.0×)也都有显著加速。

语言特性支持范围已经相当广:类与继承、mixins、模式匹配、Block / Lambda、基于 Fiber 的并发、异常处理、正则表达式、任意精度整数、文件 I/O,以及对字符串拼接链做了专门优化。项目附带 74 个通过测试和 55 个基准。值得指出的是,Matz 在这一版本里主动省略了某些边角特性(比如完整的字符编码体系),这与 mruby 的取舍思路一脉相承。背景信息:这是 Matz 在 RubyKaigi 2026 现场展示的实验项目,名字 Spinel 来自他的新猫(这只猫又是以《魔卡少女樱》中 Ruby 的搭档命名)。

HN 评论精华