بازنویسی Bun با Rust: یک شرطبندی بزرگ روی کد هوش مصنوعی
خلاصهٔ کاملتر
بازنویسی Bun از Zig به Rust با یه PR عجیب همراه بود: شاخهای به اسم claude/phase-a-port، ۶۷۵۵ کامیت، باز شده در ۸ می و مرجشده در ۱۴ می. یعنی شش روز. برای یه runtime جاوااسکریپت در سطح production. نویسنده این مقاله معتقده قبل از هر بحث فنی، یه چیز مهم باید گفته بشه: اونچه که Bun رو به اینجا رسوند، Zig بود — نه Rust.
جارد (سازنده Bun) خودش گفته که معماری و data structureها تغییر نکردن. به زبان سادهتر، اسکلت این پروژه با Zig ساخته شده. تیم با Zig سریع iterate کرد، محصول رو شیپ داد، فاندینگ گرفت، و حالا بعد از acquisition به یه stack «متداولتر» رفته. این یه تصمیم تجاری معقوله — ولی نباید وانمود کرد که Zig ناکافی بوده.
مشکل اصلی اینه که کد نوشتهشده توسط Claude، توسط Claude بررسی شده و تنها reviewer انسانی هنوز review نکرده بود. یه اصل پایه در مهندسی نرمافزار میگه: کدی که نمیفهمیش نباید وارد production بشه — نه به خاطر اینکه حتماً باگ داره، بلکه چون وقتی باگ داشت، نمیدونی از کجا شروع کنی.
«همه تستها پاس میشن» هم اینجا کافی نیست. تستها رفتار درست رو روی مسیرهای شناختهشده تأیید میکنن، نه invariantهای سراسری که فقط توی ذهن طراح اصلی وجود داشتن. هوش مصنوعی کد رو تابع به تابع با معادلسازی معنایی ترجمه میکنه، ولی تصویر بزرگ و وابستگیهای پنهان بین بخشهای مختلف رو درک نمیکنه. این ریسک با ۶۷۵۵ کامیت، ۶۷۵۵ بار تکثیر شده.
در مورد دلیل اعلامشده برای مهاجرت — باگهای use-after-free و memory leak در Zig — نویسنده میگه تشخیص درسته ولی نتیجهگیری اشتباه. مشکل «ناکافی بودن Zig» نبوده، بلکه عدم تطابق فرهنگ تیم Bun با الزامات Zig بوده. Zig برای برنامهنویسانی طراحی شده که حاضرن هزینه کنترل کامل حافظه رو بپردازن. تیم Bun فرهنگ iterate سریع داره، که با discipline سختگیرانه مدیریت حافظه تنش داره. این mismatch بین Bun و Zig بود، نه شکست Zig.
پیشبینی نویسنده اینه که کوتاهمدت احتمالاً مشکلی نیست — تستها مسیرهای اصلی رو پوشش میدن، canary مشکلات واضح رو نشون میده، و Rust یه کلاس کامل از باگهای حافظه رو حذف میکنه. ولی بلندمدت، وقتی یه باگ concurrency عجیب شش ماه دیگه زیر یه load خاص ظاهر بشه، مهندسی که داره debug میکنه با سیستمی روبرو میشه که هیچکس واقعاً نفهمیده. تفاوت بین «باگ نداره» و «کسی نمیدونه چرا باگ داره» ساعت سه بامداد یه incident production خیلی واضح میشه.
نکات کلیدی:
- بازنویسی Bun از Zig به Rust در شش روز با ۶۷۵۵ کامیت AI-generated انجام شد
- هیچ انسانی کل این کدبیس رو نخونده — Claude نوشت، Claude بررسی کرد
- موفقیت تستها، درک global invariantها و وابستگیهای پنهان بین ماژولها رو تضمین نمیکنه
- مشکل اصلی Zig نبود؛ عدم تطابق فرهنگ سرعتمحور تیم با مدیریت دستی حافظه بود
- ریسک واقعی اینه: آیا کد AI-generated بدون human review میتونه بلندمدت در production نگهداری بشه؟




