مایکروسافت به صورت عاملی اجرای Copilot را با قیمت 120 هزار دلار به Rust منتقل می کند
کامپایلر Rust از مزاحمت های LLM آشفته باقی می ماند
موتور نرمافزاری که زیربنای GitHub Copilot و تعداد فزایندهای از محصولات مایکروسافت است، اکنون به طور کامل در Rust نوشته میشود و عوامل هوش مصنوعی بیشتر کار انتقال را انجام میدهند. هزینه مهاجرت حدود 120000 دلار در استفاده از توکن هوش مصنوعی به علاوه حدود سه هفته از زمان یک توسعه دهنده است. با این حال، مدیران همچنین مجبور بودند با چند ده رگرسیون در کد حاصل دست و پنجه نرم کنند که به چالشهای مداوم هوش مصنوعی در درک Rust اشاره میکرد. این تلاش ماژول به ماژول زمان اجرا را تا زمانی که کار تکمیل شد، به روز کرد و بیش از 135 نسخه را در یک دوره زمانی 14.5 هفته ای در بر گرفت.
تقریبا 1.3 درخواست کشش پورت در روز باز می شد. به طور کلی، نمایندگان 430000 خط TypeScript را به 800000 خط تولید Rust تبدیل کردند. برای ساده نگه داشتن پورت تا حد امکان، پورت فقط به صورت موردی جایگزین ماژول های TypeScript شد. به نظر نمی رسید ساختار زمان اجرا را بهینه کند. اون کار بعدیه و Rust که برای عملکرد ناب خود شناخته شده است، ناامید نشد. یک معیار اندازه گیری کرد که زمان اجرا با استفاده از یک کلاینت مشترک و 100 خط لوله همزمان، با چه سرعتی می تواند 1000 چرخه عمر جلسه یک نوبتی را تکمیل کند.
اجرای اصلی TypeScript 7.55 از این چرخه های عمر در ثانیه را تکمیل کرد، در حالی که Rust در حال اجرا در فرآیند 120 در ثانیه را مدیریت کرد - که نشان دهنده سرعت 15.9 برابر در آن حجم کاری خاص است. از نظر حافظه، یک دسته 10 مشتری از عوامل 1383 مگابایت با TypeScript مصرف می کردند در حالی که Rust rewrite تنها 126 مگابایت را مصرف می کرد که به همان گروه خدمت می کرد. در Rust، کار به جای ایجاد فرآیندهای پسزمینه خارجی برای تکمیل، که یک نیاز برای TypeScript است، در جریان بود.
Copilot از VS Code تا Microsoft Office در نگاه اول، اکثر کاربران ممکن است ندانند زمان اجرا Copilot چقدر فراگیر است. از رابط خط فرمان GitHub Copilot (CLI)، برنامه Copilot، SDK و عامل ابری GitHub Copilot پشتیبانی می کند. در VS Code، Visual Studio، Excel، Outlook، PowerPoint و تعداد بیشماری خدمات ابری مایکروسافت نشان داده می شود. در اصل، زمان اجرا با TypeScript نوشته شده بود و از Node.js به عنوان چارچوب و V8 برای موتور اجرا استفاده میکرد.
تایپ اسکریپت و نود برای توسعه سریع نقش مهمی داشتند، اما وقتی در مقیاس مورد استفاده قرار می گرفتند، از نظر راه اندازی سریع و تراکم سرور آسیب دیدند. استفان توب، مهندس ممتاز مایکروسافت، در پستی نوشت: "این به هیچ وجه ادعایی نیست که هر برنامه بزرگ TypeScript باید به Rust تبدیل شود. الزامات ما بر تعبیه از طریق C ABI، سربار پایین و حالت ثابت و استفاده از منابع قابل پیش بینی تاکید داشت. Rust این اهداف را ممکن کرد."
این پروژه از Copilot برای بازنویسی Copilot استفاده کرد که به نوبه خود از چندین LLM استفاده کرد - GPT-5.6 Sol و Claude Opus 4.8 هر دو بررسی نام شدند - برای اجرای بخشهای مختلف کار، بسته به قدرت طبیعی هر LLM. توب، عوامل خوشخوان اما پرحرف، استفاده از عوامل را تا حد زیادی موفق ارزیابی کرد. در واقع، اگر این پروژه به صورت دستی انجام می شد، سال ها طول می کشید و میلیون ها هزینه در بر داشت. توب خاطرنشان کرد که ماموران چندین رفتار اضطراری شگفت انگیز از خود نشان دادند. برای یک، آنها زمان بسیار بیشتری را صرف جمع آوری اطلاعات کردند تا اینکه واقعا کد بنویسند.
او مینویسد: «تصویر رایج از کد پرتابکننده هوش مصنوعی تقریبا به عقب است؛ در این مقیاس، کار بیشتر شبیه تحقیقات تکراری، بررسی وضعیت فعلی، تشکیل یک فرضیه، ایجاد تغییر هدفمند، شستشو و تکرار است.» شگفتی دیگر این بود که چگونه جلسات مکرر با جلسات دیگر تعامل داشتند، چه جلساتی که آنها تولید کردند و چه با جلسات دیگر. یکی از سختترین تبدیلها، فایل session.ts بود که بیش از 30000 خط TypeScript داشت که تمام جنبههای زمان اجرا را لمس میکرد.
جلسه انتقال، که در نهایت 25 ساعت طول کشید تا تکمیل شود، با صرف 56 دقیقه برای خواندن مستندات و برقراری 122 تماس ابزار برای شفاف سازی آغاز شد. سپس 15 جلسه کودک ایجاد کرد که هر کدام درخت کاری و عامل خود را ایجاد کردند. سپس، آنها شروع به ارتباط با یکدیگر کردند. با استفاده از یک مهارت ارکستراسیون داخلی، یک جلسه هر جلسه فعال دیگری را پیدا کرد و برای کسانی که ماموریتهایشان همپوشانی داشت، پیامهایی ارسال کرد و درخواست هماهنگی کرد. کامپایلر یک معلم است، نه یک اوراکل با توجه به مزایای عملکرد، Rust ثابت کرده است که یک زبان محبوب برای بازنویسی برنامهها است.
به عنوان مثال، خالق Bun، جارد سامنر، اخیرا زمان اجرا و کیت ابزار جاوا اسکریپت متعلق به Anthropic را که حاوی تقریبا 535000 خط کد Zig بود، به Rust منتقل کرد که تقریبا به طور کامل از عوامل کلود استفاده می کرد. از 30 جولای، پورت آزمایشی Rust در حال گذراندن 99.8 درصد از آزمایشهای موجود Bun در Linux x64 glibc بود، و نسخههای پایدار همچنان از پایگاه کد Zig ارسال میشوند. هزینه آن کار 165000 دلار به صورت توکن بود. اما همانطور که توب دریافته است در استفاده از Rust نیز خطرات پنهانی وجود دارد. برای یک LLM و یک برنامه نویس تنبل، اگر کد کامپایل شود، Rust معتبر است.
اما در طول فرآیند، پروژه با ده ها رگرسیون در کد مواجه شد. رگرسیون چیزی است که قبلا کار می کرد، اما پس از به روز رسانی دیگر انجام نمی شود. برای مثال، کامپایلر نمیداند که آیا توابع در ترتیب درستی هستند، آیا کار با هزینه قابل قبولی کامل میشود، آیا الزامات نانوشته توسعهدهنده را برآورده میکند یا اصلا از لحاظ داخلی منسجم است.
در RustConf که هفته گذشته در مونترال برگزار شد، مشاور لیزا کراسمن در مورد تمرین تلقی کردن کامپایلر به عنوان یک "اوراکل" یا آخرین کلمه در مورد معتبر بودن یا نبودن برخی از کدهای Rust هشدار داد. او گفت: "Rust مانع از نوشتن کد ناامن حافظه توسط عامل می شود و مانع از نوشتن صحیح برنامه اشتباه نمی شود." اگر عاقل باشند، یک توسعهدهنده انسانی با کامپایلر بهعنوان یک معلم رفتار میکند و خطاها را بهعنوان مسیری برای درک بهتر حوزه زبان رمزگشایی میکند.
از طرف دیگر، یک LLM فقط از کامپایلر به عنوان یک جعبه سیاه استفاده میکند، که میتواند با راهحلهای بیپرده و ناکارآمد تا زمانی که از پس آن برآید (شاید این همان چیزی است که اندرو کلی، خالق Zig، زمانی که کد Bun’s Rust را «شیب بررسینشده» نامید، منظورش این بوده است. در مورد توب، او دریافته بود که رگرسیونهای تایید شده توسط کامپایلر میتواند ناشی از معناشناسی و رفتارهای مبهم، جابجایی شاخهها، ویژگیهای از دست رفته که پورت نشدهاند و رفتارهای متفاوت با کد جایگزین باشد. توب نوشت: «این به هیچ وجه استدلالی علیه کامپایلر Rust نیست.
اما "اگر کامپایل شود، درست است" فقط به عنوان یک شوخی مفید است." ®
متن اصلی (انگلیسی)
Microsoft agentically ports Copilot runtime to Rust for $120K
The Rust compiler remains unperturbed by the antics of the LLM