Эра цифровых рекрутеров в СШАМиграция Bun на Rust силами ИИ

История развития Bun всегда была связана с поиском предельной производительности, что изначально привело создателей проекта к выбору языка Zig. Однако вместе с мощью ручного управления памятью пришли и классические проблемы системного программирования: ошибки типа use-after-free и double-free. Постоянная борьба с непредсказуемыми крашами и тревога за стабильность системы стали катализатором для принятия смелого решения — полного переноса кодовой базы на Rust.
Переход на Rust был продиктован не просто модой, а прагматичным стремлением к безопасности. В Rust концепции владения и заимствования (ownership и borrowing) переносят проверку корректности работы с памятью с этапа исполнения на этап компиляции. То, что в Zig приводило к падению программы в продакшене, в Rust становится ошибкой, которую невозможно проигнорировать при сборке.
Масштаб задачи выглядел пугающе: более 535 тысяч строк кода на Zig требовали перевода на новый язык. По самым оптимистичным прогнозам, команда инженеров потратила бы на это около года, что означало бы фактическую остановку развития продукта. Решением стал не просто «умный промпт», а развертывание сложной агентной инфраструктуры.
Фундаментом, сделавшим этот прыжок возможным, стал массивный набор тестов на TypeScript. Поскольку тесты были написаны на языке высокого уровня и не зависели от внутренней реализации рантайма, они стали «золотым эталоном». Миллион проверок гарантировали: если новая версия на Rust проходит тесты, она ведет себя идентично оригиналу. Это позволило превратить процесс миграции в итеративную задачу по устранению расхождений.
Процесс реализации превратился в настоящий триумф агентной инженерии. Вместо одного чат-бота была задействована целая армия из 64 параллельных экземпляров Claude. Основная сложность возникла при попытке разбить монолит на 100 отдельных Rust-крейтов: борьба с циклическими зависимостями породила около 16 000 ошибок компиляции. Для человека такой объем правок стал бы непреодолимым барьером, но для распределенной сети ИИ-агентов это стало рутинной задачей.
Методология была строго выверена: агенты группировали ошибки по файлам, выполняли проверку через cargo check и работали в изолированных циклах, не затрагивая git до завершения прогона. Самым важным аспектом стал подход к исправлению ошибок. Когда процесс давал сбой, разработчик не правил код вручную — он правил сам алгоритм работы агентов, оптимизируя цикл генерации.
Результаты оказались ошеломляющими. За 11 дней количество падающих тестов сократилось с почти тысячи файлов до нескольких единиц, а затем и вовсе обнулилось для всех поддерживаемых операционных систем. Миллион строк Rust-кода были интегрированы в основную ветку всего через шесть дней после открытия пул-реквеста.
Тем не менее, столь стремительная миграция оставила след. Анализ новой кодовой базы выявил более 13 000 блоков unsafe. В экосистеме Rust использование unsafe позволяет обходить строгие проверки компилятора ради производительности или взаимодействия с низкоуровневым API, но избыток таких блоков может нивелировать преимущества языка в плане безопасности. Это указывает на то, что прямой порт кода с помощью ИИ, даже при идеальном прохождении тестов, может привести к созданию технического долга, который придется разгребать в будущем.
Кейс Bun становится важным прецедентом для всей индустрии. Он показывает, что ИИ перерастает стадию «помощника в написании функций» и становится инструментом для масштабной структурной трансформации ПО, превращая многомесячные миграции в задачу нескольких дней.

