Ера цифрових рекрутерів у США
Міграція 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 стає важливим прецедентом для всієї індустрії. Він демонструє, що ШІ переростає стадію «помічника в написанні функцій» і стає інструментом для масштабної структурної трансформації ПЗ, перетворюючи багатомісячні міграції на завдання кількох днів.

