Создатель JavaScript-рантайма Bun Джарред Самнер опубликовал подробный разбор одной из самых нетривиальных миграций кода в истории open source: полтора года назад команда решила переписать проект с Zig на Rust - и сделала это за неделю с хвостом, задействовав десятки параллельных ИИ-агентов. Главный вопрос был не в том, реально ли это, а в том, как именно.
Почему Zig перестал устраивать
Zig дал Bun жизнь. Без него рантайм никогда бы не добрался до той аудитории, что есть сегодня, - и Самнер об этом прямо говорит. Но в какой-то момент список необработанных багов превратился в источник хронической тревоги. Значительная часть падений сводилась к двум классическим болячкам системного программирования: use-after-free и double-free. Обращение к уже освобождённой памяти, повторное её освобождение - вещи, которые в Zig остаются на совести разработчика, а в безопасном Rust просто не компилируются. Это и стало решающим аргументом.
Цена ручного переписывания была понятна: около 535 000 строк кода на Zig, небольшая команда, примерно год работы с заморозкой фич и багфиксов. Такой вариант отпал сразу.
Как это работало на практике
Ключевым страховочным слоем стал тестовый набор Bun - миллион проверок на TypeScript, не привязанных к конкретному языку рантайма. Они писались под Zig, но оказались идеальным эталоном для порта: если тесты зеленеют, реализация ведёт себя так же, как прежде.
Дальше - инженерия процесса. Монолитную кодовую базу разбили примерно на 100 Rust-крейтов, что вскрыло порядка 16 000 ошибок компиляции. Цифра пугающая для одного человека, но вполне посильная для 64 параллельных копий Claude. Агентный воркфлоу группировал ошибки по файлам, изолировал агентов друг от друга и не трогал git до завершения прогона - чтобы никто никому не наступал на пятки.
Через двое суток после первого прогона CI список падающих тестов схлопнулся с 972 файлов до 23. Ещё полтора дня - и Linux полностью позеленел. Windows сдалась последней. Итого: 11 дней активной работы, пул-реквест с ~1 млн строк Rust-кода влили в основную ветку спустя шесть дней после его открытия.
Важная деталь в подходе Самнера: когда что-то шло не так, он не правил код руками. Он правил процесс, который этот код генерирует.
Что осталось за кадром
Rust-версия уже больше месяца работает в продакшене - в том числе внутри Claude Code, начиная с версии 2.1.181 от 17 июня. Один из известных разработчиков назвал разбор Самнера описанием «чрезвычайно изощрённой агентной инженерии». Скептики, впрочем, нашли повод для критики: в новой кодовой базе обнаружилось более 13 000 блоков unsafe-кода - на порядки больше, чем принято в сопоставимых Rust-проектах. Прямолинейный перенос сложной системной логики редко даётся бесплатно, и эта цена ещё может дать о себе знать.
Так или иначе, Bun показал: год ручного труда можно сжать до одиннадцати дней - если правильно выстроить процесс вокруг агентов, а не просто скормить им промпт и ждать чуда.