В начале ноября 2025 года автор заархивировал Artichoke Ruby, а позже и большинство репозиториев в организации @artichoke на GitHub. Решение далось нелегко — казалось, что оно подтверждает давний комментарий с Hacker News: альтернативные реализации Ruby со временем выдыхаются. Но проект изначально не ставил целью «исправить Ruby».
Всё началось как игрушка: хотелось собрать машину Голдберга — редактор на Monaco, чтобы писать Ruby-код, который генерирует SCSS и динамически меняет стили страницы через Tokio HTTP-сервер. Понадобился крейт mrusty с биндингами к mruby. Биндинги работали, но были сыроваты, и вместо интерфейса автор начал постепенно заменять части mruby на Rust, вытесняя оригинальный код по принципу Strangler Fig. Так появился «оксидированный» mruby.
Проект оставался исследовательским. Реальной точкой отсчёта стала реализация Regexp — того, чего в mruby не было, — и доклад о ней на RubyConf 2019. Тогда всё стало осязаемым.
За шесть лет Artichoke обзавёлся полностью соответствующей спецификациям реализацией String на чистом Rust поверх крейта bstr. Эта работа углубила понимание кодировок, границ байтов и символов и даже попала в анонс самого bstr. Архитектура выстроилась модульной и capability-ориентированной: несколько крейтов с чёткими зонами ответственности — artichoke-*, spinoso-*, mezzaluna-*, scolapasta-*. Интерпретатор можно было собирать только с нужными возможностями, а родная функциональность строилась на трейтах и композиции.
Одним из самых поучительных этапов стало избавление от Rc<RefCell<_>> для состояния интерпретатора. Переход на явное &mut Artichoke потребовал перелопатить почти все API и расставил границы мутабельности с помощью borrow checker. Именно тогда стало кристально ясно, зачем YARV и CPython сходятся к чему-то вроде GIL: моделирование разделяемого изменяемого состояния в рантайме динамического языка невероятно сложно без него. Проект также подтвердил, что Ruby глубоко привязан к C и POSIX-допущениям, и лучше принять эту реальность, чем бороться с ней.
Сейчас времени на Artichoke не осталось. Фокус сместился на работу в OpenAI, семью, а искра «а смогу ли я разобраться?» угасла — глубокое знание Rust и unsafe уже получено. Бесконечные обновления совместимости со спецификациями mspec и ruby/spec под MRI 2.6.3, погоня за изменениями поведения и краевыми случаями без реальных пользователей потеряли смысл. Точкой стало то, что Hash — следующий ключевой класс — так и не начали реализовывать три года спустя после String.
Репозитории остаются публичными и доступными для изучения, форков или встраивания. Активной разработки не будет, патчи и обновления безопасности прекращены. Тем, кто зависит от Artichoke, стоит мигрировать на CRuby или другой поддерживаемый движок. Автор прощается без чувства провала: проект служил своей цели, учил, оставил артефакты и избавил от ежемесячных Dependabot-пулреквестов. Главный вывод: стройте. Даже странное. Даже то, что не навсегда. Сам процесс меняет вас.