العودة
إعادة كتابة مُترجم Roc من Rust إلى Zig تصل إلى التكافؤ الوظيفي في 487 يومًا
SiTech AI Team3 წთ. საკითხავი

إعادة كتابة مُترجم Roc من Rust إلى Zig تصل إلى التكافؤ الوظيفي في 487 يومًا

أعاد فريق لغة البرمجة Roc كتابة مُترجمه المكوَّن من 300 ألف سطر من Rust إلى Zig، ووصل إلى التكافؤ الوظيفي مع المُترجم الأصلي في 487 يومًا. الورقة تقارن زمن البناء وأمان الذاكرة وملاءمة النظام البيئي.

أمضى الفريق العامل على لغة البرمجة Roc عامًا ونصف العام في إعادة كتابة نحو 300 ألف سطر من كود Rust بلغة Zig، ووصل الآن إلى التكافؤ الوظيفي مع المُترجم الأصلي. هذا ليس إصدارًا رسميًا — إذ تُخطَّط النسخة 0.1.0، وهي أول إصدار مرقَّم لـ Roc، في وقت لاحق من هذا العام — لكن المُترجم الجديد قادر بالفعل على بناء برامج حقيقية وتشغيلها.

من أوائل الاختبارات كانت Rocci Bird، لعبة لـ WASM-4 مكتوبة بأقل من ألف سطر من كود Roc. مع المُترجم الجديد، يُنتج الأمر roc build --opt=size ملف WebAssembly بحجم 31 كيلوبايت، أي أقل من نصف الحجم الذي أنتجه المُترجم الأصلي. وقد تطلَّب تشغيل اللعبة إنجاز عدد كبير من ميزات المُترجم.

إعادة كتابة استمرت 487 يومًا

استغرقت إعادة الكتابة 487 يومًا، مقابل 11 يومًا لعملية النقل المعاكسة في مشروع Bun، التي نقلت نحو 500 ألف سطر من Zig إلى Rust. ويرى الكاتب أن هذه المقارنة مضلِّلة: فما فعله Bun كان نقلًا مباشرًا، بينما اختار Roc إعادة الكتابة من الصفر لأن جزءًا كبيرًا من المُترجم كان سيُعاد تصميمه. جاء القرار بعد مشكلة معمارية في نظام تخصيص lambda set في Roc امتدت عبر عدة مراحل من المُترجم.

لماذا Zig وماذا حدث لأمان الذاكرة

حدَّدت أربعة اعتبارات الاختيار: زمن البناء، والتحكم في الذاكرة — إذ يعتمد Roc على الـ arenas وتخطيطات struct-of-arrays، بينما تمرِّر منظومة Zig المُخصِّصات بدل افتراض مُخصِّص عالمي واحد — وملاءمة النظام البيئي، والمساعدة في الكود غير الآمن من ناحية الذاكرة. احتوى مُترجم Rust على نحو 1200 استخدام لـ unsafe في 300 ألف سطر، وكان الفريق يتوقع الاستمرار في كتابة هذا النوع من الكود.

عمليًا لم يُلحق هذا التحوُّل أي ضرر. تُظهر تقارير الأخطاء المصنَّفة بواسطة Claude Opus 4.8 وجود 2596 خطأً في مُترجم Rust، منها 21 تتعلق بتلف الذاكرة، مقابل 431 خطأً في مُترجم Zig، منها 10 تتعلق بتلف الذاكرة. كانت ثمانية من العشرة أخطاء ترجمة خاطئة، والاثنان الآخران خطأا use-after-free في الإبلاغ عن الأخطاء أدَّيا إلى ظهور أسماء الملفات كرموز بديلة في roc check و roc bundle.

أزمنة البناء وما التالي

على حاسوب مكتبي بمعالج Intel يعمل بنظام Ubuntu 26، استغرق مُترجم Rust بحجم 354 ألف سطر 25.4 ثانية للبناء البارد و3.4 ثانية للبناء التدريجي. أما نسخة Zig بحجم 464 ألف سطر فتستغرق 32.1 ثانية للبناء البارد ونحو 35 ميلي ثانية للبناء التدريجي — لكن على Zig 0.17.0 فقط، لأن خطأً في الإصدار المستقر 0.16.0 يُعطِّل البناء التدريجي على قاعدة الكود هذه. وبدلًا من الاعتماد على مُترجم nightly، ينتظر الفريق الإصدار المستقر التالي.

كما يُخزِّن المُترجم نتائج العمل على القرص عبر إلغاء تسلسل دون تحليل: فبُنى البيانات فيه مصفوفات من فهارس 32 بت بدل المؤشرات، ما يعني تحميل النتائج المخزَّنة إلى الذاكرة مباشرة دون تحليل. وتشغيل roc check مرتين يعيد استخدام مخرجات التشغيل السابق بسرعة تقارب سرعة memcpy.

SSiTech

SiTech — تطوير ويب مدعوم بالذكاء الاصطناعي

نبني مواقع سريعة وعصرية وندمج الذكاء الاصطناعي في سير عمل الشركات. لديك مشروع أو سؤال؟ يسعدنا مساعدتك.