
كيف تسارع rustc في سبتمبر: متوسط زمن الترجمة انخفض بنسبة 4.57%
من 29 يوليو إلى 28 سبتمبر 2026، انخفض متوسط زمن ترجمة rustc بنسبة 4.57%: من أصل 629 قياسًا معياريًا، تحسّن 555، وساء 74 فقط. نشر المراجعة Nicholas Nethercote.
نشر Nicholas Nethercote في 30 سبتمبر مراجعة أخرى لأداء مترجم Rust. مرّ شهران منذ التقرير السابق، وخلال هذه الفترة تسارع rustc بشكل ملحوظ.
النتيجة العامة
وفق قياسات الفترة من 29 يوليو إلى 28 سبتمبر 2026، انخفض متوسط زمن الترجمة بنسبة 4.57%. من أصل 629 قياسًا معياريًا، تحسّن 555، وساء 74 فقط، بينما أظهرت عدة اختبارات انخفاضًا بنسبة مزدوجة الخانة. ويصف المؤلف هذه النتيجة بأنها «بحر أخضر».
rustdoc وClippy وLLVM 23
حقق Noah Lev تسريعًا كبيرًا في rustdoc وشرح في منشور منفصل كيف وصل إلى ذلك. أما Clippy فقد فعّل Jakub Beránek خاصية PGO (#159642): تحسّن wall-time في معظم اختبارات Clippy، وفي أفضل حالة بنسبة 18%.
حدّث Nikita Popov إصدار LLVM المستخدم في المترجم إلى LLVM 23 (#158734). عادةً ما يمنح تحديث LLVM تسريعًا: انخفض متوسط wall-time في جميع الاختبارات بنسبة 1.2%، وهذا مهم لتغيير واحد.
borrow checker وtrait solver جديدان
تم تفعيل borrow checker الجديد Polonius Alpha في قناة Nightly. إنه أكثر دقة ويقبل بعض البرامج الصحيحة التي كان الأسلوب القديم يرفضها، لكنه يقوم بعمل أكبر وفي حالات منفردة يزيد أيضًا زمن الترجمة. وقد أثر ذلك أيضًا في مكتبة serde الشائعة. جعل Jack Huey (#161938) حسابات liveness تتم عند الطلب: بالنسبة إلى serde انخفض عدد التعليمات بنسبة 3-5%. وفي #163027 غيّر بنية البيانات والتضمين، ما يعطي انخفاضًا أقل من 1% في معظم الاختبارات.
كما تم تفعيل trait solver جديد في Nightly، وهو يعمل ببطء في نسبة صغيرة من الحالات. كتبت Jana Dönszelmann منشورًا مفصّلًا عن أدائه. أدت تغييرات Nethercote (#160479، #160605، #160801، #160892، #161077، #161211) إلى خفض زمن الترجمة بشكل حاد في بعض الحزم الاستثنائية: بنسبة 50% في موضع، و25% في آخر، و15% في موضع ثالث، وأكثر من ذلك في اختبار ضغط واحد.
تحليل xmakro وdataflow
قدّم المساهم الجديد xmakro عدة تحسينات. في #157281 حسّن معالجة impl أثناء بناء رسم التخصص: انخفض عدد الدورات في جميع الاختبارات بمتوسط 1.58%. وفي #158059 تم تسريع تحميل بيانات الترجمة التزايدية (في أفضل حالة 6%)، وفي #160473 قلّل التخصيصات على مسار obligations الساخن (2%)، وفي #160268 استبدل الإرسال الديناميكي بالإرسال الثابت.
غيّر Nethercote خوارزمية اجتياز CFG لتحليلات dataflow (#160193). في حزمة cranelift-codegen تحتوي دالة واحدة على أكثر من 18,000 كتلة أساسية: مع الخوارزمية القديمة احتاج تحليل EverInitializedPlaces إلى 1.5 مليون استدعاء للوصول إلى fixpoint، ومع الجديدة إلى 90,000. وبالنسبة إلى بناء check لهذه الحزمة انخفض wall-time بنحو 30%. وفي #160033 تم تحسين EverInitializedPlaces أكثر، ما قلّل عدد التعليمات في اختبار match-stress بنسبة 17%.
من بين التغييرات المتبقية #160535، حيث زاد Chris Denton الحجم الافتراضي للمكدس (في أفضل حالة بنحو 3%). يبدأ Nethercote غدًا العمل في Hexcat على مشروع لتحسين أداء rustc.
SiTech — تطوير ويب مدعوم بالذكاء الاصطناعي
نبني مواقع سريعة وعصرية وندمج الذكاء الاصطناعي في سير عمل الشركات. لديك مشروع أو سؤال؟ يسعدنا مساعدتك.