Сервис развивается: тестируем формат, собираем идеи, улучшаем сервис. Есть идеи?

Написать
Войти
Дайджесты новостей
Иллюстрация к статье о переходе рантайма Bun v1.4 на Rust

Bun v1.4: как полный переход на Rust и генерация кода нейросетями изменили рантайм JavaScript

Команда Bun представила версию 1.4 — первый стабильный релиз на Rust-движке после приобретения проекта компанией Anthropic. Рантайм ускорил холодный старт, снизил потребление памяти серверов на 48% и заменил 15 популярных npm-библиотек нативными API, вызвав споры о безопасности ИИ-разработки.

Bun v1.4: как полный переход на Rust и генерация кода нейросетями изменили рантайм JavaScript

Развитие серверного JavaScript подошло к моменту, когда скорость разработки и производительность низкоуровневого ядра сталкиваются напрямую. Проект Bun изначально создавался как комплексная альтернатива Node.js, объединяющая в одном исполняемом файле рантайм, менеджер пакетов, быстрый бандлер и тестовый раннер. В августе 2026 года в профильном сообществе развернулось масштабное обсуждение релиза Bun v1.4: согласно сообщениям отраслевых источников, проект пережил радикальную внутреннюю трансформацию, полностью переписав кодовую базу с языка Zig на Rust при помощи ансамбля автономных нейросетевых агентов Claude Fable 5.

Новость вызвала двойственный отклик. С одной стороны, заявленные метрики демонстрируют рекордный прирост скорости и двукратное сокращение потребления оперативной памяти. С другой стороны, методы генерации ядра и опубликованная статистика открыли острую инженерную дискуссию о безопасности кода, созданного искусственным интеллектом без сплошного человеческого аудита.

Архитектурный контекст: зачем рантайму понадобился Rust

Чтобы оценить масштаб обсуждаемых изменений, важно понимать назначение инструмента. Рантайм (runtime) — это низкоуровневая среда выполнения программного кода, которая берет на себя управление памятью, взаимодействие с операционной системой, сетевыми сокетами и файловыми дескрипторами. Исторически Bun строился на движке JavaScriptCore от Apple и связке низкоуровневого кода на языке Zig, что обеспечивало экстремальную скорость, но накладывало серьезные требования к ручному управлению ресурсами.

По данным отраслевых источников, главной причиной миграции на Rust стало выявление серии сложных ошибок работы с памятью в Zig-версии: состояний use-after-free (обращение к освобожденной памяти), двойных освобождений (double-free) и скрытых утечек в сборщике Bun.build(). Компилятор Rust исключает подобные классы уязвимостей на этапе сборки за счет строгих правил владения ссылками.

Сама процедура переписывания описывается как 11-дневный спринт: 535 тысяч строк кода на Zig были преобразованы в более чем 1 миллион строк на Rust силами до 64 параллельных агентов Claude Fable 5. На перенос потребовалось 6 502 коммита и около 5,9 миллиарда токенов, а полученный бинарный файл, согласно сообщениям, уменьшился в объеме на 17–20%.

Заявленные метрики: ускорение холодного старта и экономия памяти

В опубликованных материалах приводятся впечатляющие показатели прироста производительности в версии 1.4:

  1. Холодный старт процесса. Время начальной инициализации (cold start) сократилось на Linux с 10.9 мс до 5.1 мс (ускорение на 50%), а на Windows — с 39.0 мс до 15.5 мс (в 2.5 раза быстрее).
  2. Потребление оперативной памяти. Под непрерывной нагрузкой в 1 миллион запросов потребление памяти HTTP-серверами снизилось почти наполовину: для фреймворка Fastify — с 233 МБ до 120 МБ (-48%), для Express — с 169 МБ до 92 МБ (-46%), а для встроенного модуля node:http — со 135 МБ до 81 МБ.
  3. Процессорная нагрузка в продакшене. В инфраструктуре Claude Code 99-й перцентиль (p99) использования CPU снизился с 24% до 10%, а медианное значение (p50) — с 5.8% до 2.5%.
  4. Менеджер зависимостей. За счет оптимизации глобального виртуального хранилища (Global Virtual Store) установка пакетов в чистом CI-окружении стала проходить за 950 мс, а повторные сборки с кэшем занимают около 210–250 мс.

Помимо скорости ядра, в релиз вошли улучшения совместимости с тестами Node.js: ключевые модули node:http, node:fs и node:sqlite проходят от 97% до 100% стандартного тестового набора, обеспечивая запуск сложных фреймворков вроде Next.js и инструментов тестирования Playwright.

Экосистема и нативные API: замена внешних npm-пакетов

Стратегия Bun направлена на сокращение графа сторонних зависимостей. В версию 1.4 вошли более 15 нативных интерфейсов, заменяющих популярные библиотеки:

  • Bun.Image: встроенный модуль обработки и конвертации графических форматов (JPEG, PNG, WebP, AVIF), работающий быстрее библиотеки sharp.
  • Bun.WebView: управление системным веб-движком без необходимости разворачивать тяжелые пакеты Puppeteer или Playwright.
  • Bun.SQL: универсальный нативный клиент для баз данных PostgreSQL, MySQL и SQLite без внешних драйверов.
  • Bun.Archive и Bun.markdown: встроенная работа с tar.gz-архивами и программный парсер Markdown с компиляцией в HTML и React-компоненты.
  • Нативные парсеры форматов конфигураций JSON5, JSONC, XML и TOML.
  • Встроенный React Compiler для оптимизации компонентов на этапе сборки без плагинов Babel.

Рантайм поддерживает прямое исполнение TypeScript через механизм type stripping — быстрое удаление аннотаций типов на лету без предварительной статической проверки, что ускоряет локальный цикл разработки.

Проверочная рамка: что подтверждено официально, а что остается утверждением

При анализе столь масштабных заявлений инженерная практика требует четкого разделения независимых фактов и непроверенных сообщений.

Официальная общедоступная документация Bun на ресурсе bun.sh/docs по-прежнему характеризует архитектуру рантайма как построенную на языке Zig и движке JavaScriptCore. Официальные release notes репозитория не содержат прямых подтверждений полного переписывания ядра на Rust силами Anthropic или заявленных рекордных сумм затрат на API.

В связи с этим все приведенные цифры ускорения, данные об 11-дневном переписывании и корпоративные детали следует воспринимать как сообщения отраслевого источника, требующие самостоятельной верификации перед принятием архитектурных решений. Любой бенчмарк из презентации демонстрирует идеализированный изолированный сценарий, который не воспроизводится автоматически на реальной прикладной нагрузке с комплексной бизнес-логикой и базами данных.

Риски автоматической кодогенерации: unsafe-блоки и ревью без человека

Главным предметом критики сообщества стал технический долг сгенерированного кода. В опубликованных материалах отмечается, что в итоговой Rust-кодовой базе содержится более 13 000 unsafe-блоков.

Unsafe-блок в Rust — это специальная конструкция, внутри которой компилятор отключает встроенные автоматические проверки безопасности памяти (проверку границ массивов, разыменование сырых указателей), перекладывая ответственность на автора кода. В написанных вручную проектах аналогичного объема количество таких участков обычно не превышает нескольких десятков.

Второй критический фактор — отсутствие полноценного человеческого код-ревью. Проверка пулл-реквеста объемом более миллиона строк была полностью делегирована автоматическим ИИ-рецензентам (CodeRabbit и Claude). Прохождение 99.8% существующих синтетических тестов подтверждает сохранение прежнего внешнего поведения API, но не гарантирует отсутствие скрытых логических дефектов, деградации в граничных сценариях и уязвимостей нулевого дня под нестандартной нагрузкой.

Практические рекомендации по внедрению и проверке

Переход на новые версии рантаймов требует поэтапного подхода с обязательным контролем стабильности:

  1. Изолированное тестирование в CI/CD. Использование быстрых менеджеров пакетов и тест-раннеров в контурах непрерывной интеграции дает немедленный выигрыш по времени без риска для продакшена.
  2. Проверка нативных N-API модулей. Если проект использует скомпилированные C/C++ бинарные дополнения (например, специфические криптографические драйверы или парсеры), их совместимость необходимо проверять вручную на конкретной операционной системе.
  3. Канареечное развертывание (Canary Deployment). Перевод одного второстепенного микросервиса на новый рантайм с перенаправлением 1–5% боевого трафика позволяет собрать реальные профили задержек и утечек памяти.
  4. Сквозной аудит безопасности. Применение статических анализаторов типов (tsc --noEmit) остается обязательным шагом перед сборкой, поскольку удаление типов рантаймом не защищает от ошибок типизации в коде.

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