Bun переписали с Zig на Rust с помощью ИИ-агентов
Джарред Самнер, автор JavaScript-рантайма Bun, опубликовал давно обещанный пост о полном переписывании проекта с Zig на Rust. По словам Саймона Уиллисона, это подробное и незаурядное описание агентной инженерии — с динамическими рабочими процессами, пробными прогонами и состязательным ревью.
Большую часть текста Самнер посвящает похвале Zig: именно этот язык позволил Bun дойти до нынешнего состояния, и он благодарен ему за это. Однако именно Zig стал источником главной проблемы проекта.
Причина переписывания
Самнер признаётся, что список багов Bun вызывал у него постоянное беспокойство — он засыпал, тревожась о падениях программы. По его словам, дело не в самом Zig: другие проекты на этом языке не сталкиваются с подобными трудностями. Проблема в сочетании сборки мусора с ручным управлением памятью — редком сценарии, для которого ни один язык специально не проектировался.
Значительная часть ошибок из списка багов относилась к классическим проблемам работы с памятью: use-after-free, double-free и утечкам из-за забытого освобождения в путях обработки ошибок. В безопасном Rust такие ошибки исключаются на уровне компилятора, что и стало решающим аргументом в пользу выбора языка.
Переписывание как больше не табу
Автор поста подчёркивает исторический контекст решения. Долгое время выбор языка программирования был необратимым решением для проекта такого масштаба, как Bun: индустрия давно усвоила правило «никогда не переписывайте большую программу с нуля», сформулированное Джоэлом Спольски ещё в 2000 году в эссе Things You Should Never Do.
Однако появление кодинг-агентов на основе современных фронтир-моделей меняет это уравнение: масштабное переписывание, ранее считавшееся неоправданно рискованным и трудозатратным, становится практически осуществимой задачей.
Пост Самнера, по оценке Уиллисона, интересен именно как детальный кейс применения агентного подхода к решению нетривиальной инженерной задачи, а не просто как техническая заметка о смене языка.
Источник: Simon Willison
Комментарии
Войдите, чтобы комментировать.