Быстрее в 11 раз. Создатель Ruby написал компилятор Spinel
Создатель языка программирования Ruby Юкихиро Мацумото, больше известный как Matz, взялся за задачу, о которой разработчики языка спорят годами: превратить Ruby-код в быстрые нативные программы без отдельной среды выполнения. Новый компилятор Spinel уже опубликован на GitHub под лицензией MIT, а значительную часть работы Мацумото делает вместе с Claude Code от Anthropic.
Spinel разбирает Ruby-код в AST, абстрактное синтаксическое дерево, затем превращает результат в C-код и передаёт стандартному компилятору. В тестах Matz программы, собранные через Spinel, работали примерно в 11,6 раза быстрее MiniRuby, облегчённой сборки Ruby, при использовании разрабатываемой версии Ruby 4.1.0.
На выходе Spinel создаёт C-код, из которого можно собрать нативный исполняемый файл. Для Linux и Windows через MinGW подходит gcc, для Linux и macOS можно использовать Clang из LLVM. В README сказано, что BSD, вероятно, тоже заработает, но отдельные тесты для этой системы пока не проводились.
Ruby обычно выполняет код через интерпретатор: среда выполнения читает программу и запускает команды во время работы. Для ускорения язык уже использует JIT-компиляторы, включая MJIT, YJIT и ZJIT, причём два последних развивает Shopify, один из крупных пользователей Ruby. Spinel выбрал другой путь: компилятор генерирует самостоятельные нативные исполняемые файлы, которые можно запускать без дополнительной среды выполнения Ruby.
Главное ограничение Spinel связано с совместимостью. Компилятор не поддерживает некоторые возможности Ruby. За бортом остаются eval, выполнение Ruby-кода во время работы программы, потоки, кодировки кроме UTF-8, метапрограммирование с созданием методов на лету и слишком глубоко вложенные лямбда-функции.
Переменные Ruby не имеют объявленных типов, хотя сами объекты строго типизированы. Spinel выводит типы автоматически, потому что C требует чётких типов при генерации кода. Для разбора Ruby используется зрелый парсер Prism. В проект уже встроены оптимизации, включая встраивание методов и удаление мёртвого кода, а сгенерированный C-код компилируется без предупреждений на стандартном уровне. Spinel получил собственный сборщик мусора для автоматической очистки памяти и поддержку FFI, интерфейса для вызова нативных библиотек вроде libc или SQLite.
До практической замены обычного Ruby проекту далеко. Spinel остаётся экспериментом и не запустит большинство существующих Ruby-программ, включая Ruby on Rails. Но разработчики могут писать отдельные функции с учётом ограничений Spinel и вызывать такие фрагменты из основного Ruby-кода, когда важна скорость.
Matz представил Spinel на RubyKaigi 2026 в японском Хакодате. Участники конференции, включая автора заметки на Zenn, пересказали слова Мацумото: идея Spinel появилась ещё три года назад, а рабочую реализацию удалось собрать за несколько недель при помощи искусственного интеллекта (ИИ).
В репозитории Spinel у большинства файлов есть комментарий co-authored by: Claude Open 4.7 (1M context). Проект уже трижды переписывали заново в рамках серии экспериментов. Для Matz ИИ стал не заменой программиста, а ускорителем: автор Ruby понимает архитектуру языка, контролирует результат, дорабатывает код своими руками и проверяет поведение сотнями тестов и бенчмарков.