Microsoft передасть середовище виконання Copilot на Rust за 120 000 доларів

Microsoft передасть середовище виконання Copilot на Rust за 120 000 доларів



Microsoft передасть середовище виконання Copilot на Rust за 120 000 доларів

Програмний механізм, який підтримує GitHub Copilot і зростаючу кількість продуктів Microsoft, тепер повністю написаний на Rust, а агенти ШІ виконують більшу частину доставки.

Міграція коштувала приблизно 120 000 доларів США за використання AI-токена та близько трьох тижнів часу розробника. Однак менеджерам також довелося мати справу з кількома десятками регресій у отриманому коді, що вказує на постійні труднощі ШІ в розумінні Rust.

Ці зусилля оновлювали модуль за модулем під час виконання, охоплюючи понад 135 випусків протягом 14,5 тижнів. За день відкривалося близько 1,3 запитів на підключення портів.

Загалом агенти перетворили 430 000 рядків TypeScript у 800 000 виробничих рядків Rust. Щоб зробити порт максимально простим, порт замінив лише модулі TypeScript у кожному окремому випадку. Він не мав на меті оптимізувати саму структуру виконання. За тією роботою майбутнє.

І Рустам, відомий своїми худими виступами, не підвів.

Один тест вимірював, скільки часу виконання може завершити 1000 життєвих циклів за допомогою спільного клієнта та 100 одночасних потоків. Оригінальна реалізація TypeScript 7.55 завершила ці життєві цикли за одну секунду, тоді як Rust керував 120 за секунду в робочому процесі — прискорення в 15,9 разів для цього конкретного робочого навантаження.

Що стосується пам’яті, група з 10 клієнтських агентів із TypeScript спожила 1383 МБ, тоді як перезапис Rust спожив лише 126 МБ на купу служби. Усередині Rust робота залишається в конвеєрі для TypeScript замість того, щоб створювати зовнішні фонові процеси для завершення.

Копілот з VS Code в Microsoft Office

На перший погляд, більшість користувачів не знають, наскільки великий час Copilot. Він підтримує інтерфейс командного рядка (CLI) GitHub Copilot, програму Copilot, SDK і хмарний агент GitHub Copilot. Він відображається у VS Code, Visual Studio, Excel, Outlook, PowerPoint та інших хмарних сервісах Microsoft.

Спочатку середовище виконання було написано на TypeScript і використовувало Node.js як структуру та V8 для механізму виконання. TypeScript і Node були основою для швидкого розвитку, але при масштабному використанні вони постраждали з точки зору забезпечення швидкого запуску та щільності сервера.

«Це аж ніяк не означає, що кожна основна програма TypeScript повинна стати Rust. Наші вимоги наголошували на інтеграції через C ABI, низькому рівні ініціалізації та стабільному стані та передбачуваному використанні ресурсів. Rust зробив ці цілі можливими», — написав головний інженер Microsoft Стівен Табб у дописі, пояснюючи весь процес.

Проект використовував Copilot для переписування Copilot, який, у свою чергу, використовував кілька LLM – GPT-5.6 Sol і Claude Opus 4.8 – для виконання різних частин роботи залежно від природної сили кожного LLM.

Агенти начитані, але балакучі

Табб вважав використання агентів в основному успішним. Насправді цей проект тривав би роками та коштував би мільйони доларів, якби його робили вручну.

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

«Популярний образ коду розгортання штучного інтелекту є майже зворотним; у цьому масштабі робота виглядала більше як ітераційне дослідження, перевірка поточного стану, формування гіпотези, зміна цілі, промивання та повторення», — сказав він.

Іншим сюрпризом було те, як часто сеанси взаємодіяли з іншими сеансами, які вони створювали, або працювали зовсім по-іншому.

Одним із найдраматичніших подій було це сесії файл, який містив понад 30 000 рядків TypeScript, які охоплювали всі аспекти середовища виконання. Сеанс передачі, який тривав 25 годин, розпочався з 56 хвилин, витрачених на читання документації та 122 викликів інструментів для пояснення. Потім створюється 15 дочірніх сеансів, кожен із яких створює власне робоче дерево та агента. Потім вони спілкувалися між собою.

Використовуючи вбудовану функцію оркестровки, сеанс може знаходити кожен інший активний сеанс і надсилати повідомлення тим, чиї місії збігаються, із запитом на координацію.

Компілятор – це вчитель, а не оракул

Зважаючи на переваги продуктивності, Rust є популярною мовою для переписування програм. Творець Bun Джарред Самнер, наприклад, нещодавно переніс своє середовище виконання JavaScript і інструментарій, що містить близько 535 000 рядків коду Zig, на Rust, майже повністю використовуючи агентів Claude. Станом на 30 липня експериментальний порт Rust пройшов 99,8 відсотка існуючих тестів Bun на Linux x64 glibc, і стабільні випуски все ще переносяться з бази коду Zig.

Робота коштувала 165 000 доларів на вивіски.

Але, як виявив Табб, у використанні Rust є також приховані небезпеки.

Для магістра права та ледачого програміста, якщо код можна скомпілювати, то це правильний Rust.

Але протягом усього процесу проект зіткнувся з десятками регресій у коді. Регресія – це те, що раніше працювало, але більше не працює після оновлення.

Компілятор не знає, наприклад, чи функції розташовані в правильному порядку, чи завершується операція з прийнятним значенням, чи відповідає вона неписаним вимогам розробника, чи взагалі є внутрішньо узгодженою.

Минулого тижня на конференції RustConf у Монреалі консультант Ліза Кроссман застерегла від практики розглядання компілятора як «оракула» або останнього слова щодо правильності коду Rust. «Rust запобігає запису шкідливого коду в пам’ять; він запобігає написанню правильного агента неправильної програми», — сказав він.

Якщо вони розумні, люди-розробники ставляться до компілятора як до вчителя, декодуючи помилки як спосіб краще зрозуміти мовну область. З іншого боку, LLM просто використовує компілятор як чорну скриньку, яку можна скомпілювати тупими й неефективними способами, доки не буде компілюватися (можливо, що мав на увазі творець Zig Ендрю Келлі, коли називав код Bun’s Rust «безкомпромісним»).

У випадку Табба він виявив, що перевірені компілятором регресії можуть бути результатом невизначеної семантики та поведінки, дрейфу розгалужень, відсутніх функцій, які не були перенесені, та різної поведінки коду заміни.

«Це жодним чином не є аргументом проти компілятора Rust», — написав Табб. «Але «якщо підходить, то це правда» корисно лише як жарт». ®



Source link

Leave a Reply

Your email address will not be published. Required fields are marked *