Думали, крупный проект нельзя перенести за неделю? Bun сделал это с помощью ИИ

3812
Думали, крупный проект нельзя перенести за неделю? Bun сделал это с помощью ИИ

Эксперимент стал релизом за пять дней.

image

Проект Bun, теперь связанный с Anthropic, за несколько дней прошёл путь от рискованного эксперимента до огромного слияния в основной репозиторий. Среду выполнения JavaScript и набор инструментов для веб-разработки перенесли с Zig на Rust с помощью ИИ-инструментов, а в кодовую базу добавили более 1 млн строк. Масштаб изменений сразу поставил главный вопрос: можно ли двигаться с такой скоростью и не сломать крупный проект.

Bun, альтернатива Node.js для запуска JavaScript и TypeScript, закрывает сразу несколько задач веб-разработки: запускает код, собирает приложения, управляет пакетами и помогает тестировать проекты. Изначально Bun писали на Zig, языке системного программирования, но новая основная ветка теперь опирается на Rust.

За пять дней до слияния создатель Bun Джарред Самнер написал в X, что Rust-версия проходит 99,8% прежнего набора тестов Bun на Linux x64 glibc. Для проекта, который ещё недавно называли экспериментом, результат выглядел как сигнал: перенос почти наверняка попадёт в продакшен. Через три дня команда выпустила Bun 1.3.14, а Самнер предупредил, что при слиянии Rust-версии релиз станет последней версией Bun на Zig.

После слияния Самнер заявил, что Rust-версия проходит тесты Bun на всех платформах, исправляет часть утечек памяти и уменьшает размер исполняемого файла на 3-8 МБ. По словам разработчика, производительность осталась на прежнем уровне или выросла, архитектура и структуры данных не изменились. Async Rust команда не использовала.

Главная практическая причина перехода связана с памятью. Пользователи Bun уже сталкивались с утечками при запуске среды выполнения в продакшене. Самнер признал, что Rust не поймает все проблемы: слишком долгие ссылки на объекты и ошибки на границе с JavaScript всё равно остаются задачей команды. Но значительная часть списка связана с use-after-free, double-free и забытым освобождением памяти при ошибках, а Rust часто превращает подобные дефекты в ошибки компиляции или закрывает автоматической очисткой ресурсов.

Скорость перехода вызвала отдельные вопросы к проверке кода. Вторую заявку на изменение кода, где удаляли более 600 000 строк Zig, GitHub автоматически пометил как AI slop и закрыл. Формулировку можно перевести как ИИ-мусор: платформа решила, что заявка похожа на автоматически сгенерированный низкокачественный код. Судя по контексту, команда Bun вернёт удаление Zig-кода в другой форме.

Размер коммитов делает полноценное ручное ревью почти невозможным. В обсуждении Rust-слияния один из участников иронично написал, что настолько маленькое и удобное для проверки изменение, конечно, не может содержать багов.

Идею переноса Bun на Rust сообщество в целом встретило хорошо, но скорость миграции многих удивила. При обычной разработке быстрый перенос крупного проекта на другой язык считался бы рискованным. В случае Bun работу ускорили ИИ-инструменты, а Самнер назвал Rust-версию по сути той же кодовой базой, только перенесённой на другой язык.

Разработчика также спросили, будет ли Rust-версию в основном сопровождать Claude Code от Anthropic. Самнер ответил, что команда уже давно работает в похожем режиме и месяцами почти не пишет код вручную. По словам создателя Bun, похожий подход применялся ещё до перехода проекта к Anthropic.

Переход на Rust совпал с конфликтом вокруг Zig. Самнер раньше активно поддерживал Zig, но политика языка против ИИ-сгенерированного кода разошлась с подходом команды Bun. Последние версии Bun уже использовали форк Zig с правками, которые нельзя было вернуть в основной проект. Мейнтейнеры Zig дали понять, что спорные изменения не приняли бы даже без учёта вопроса про ИИ.

Bun 1.3.14, последняя версия на Zig, получил встроенный API для обработки изображений. Новый механизм умеет декодировать, преобразовывать и кодировать картинки и рассчитан как замена библиотеке Sharp для Node.js. Релиз также добавил экспериментальную поддержку HTTP/3 через QUIC во встроенном сервере Bun.

Теперь миграция Bun станет проверкой для двух идей сразу: Rust должен снизить число ошибок памяти, а ИИ-инструменты должны показать, выдержит ли крупный проект перенос с такой скоростью. Настоящий тест начнётся не в репозитории, а в продакшен-проектах, где Bun используют как рабочую среду выполнения.