Новости Быстрее в 11 раз. Создатель Ruby написал компилятор Spinel, который превращает код в нативные программы

NewsMaker

I'm just a script
Премиум
26,542
46
8 Ноя 2022
И сделал это с помощью ИИ.


t8hjyopgoxcq04cambx4y4rx4d413yzz.jpg

Создатель 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 понимает архитектуру языка, контролирует результат, дорабатывает код своими руками и проверяет поведение сотнями тестов и бенчмарков.
 
Источник новости
www.securitylab.ru

Похожие темы