العودة
كود Debug المولّد عبر derive في Rust أضاف نحو 160KB إلى uv في حالة واحدة
SiTech AI Team2 دقيقة قراءة

كود Debug المولّد عبر derive في Rust أضاف نحو 160KB إلى uv في حالة واحدة

يضيف Rust حالياً تلميحات inline إلى جزء من الشيفرة المولّدة بواسطة عدة ماكرو derive. في حالة واحدة، أنتج التنفيذ الكبير لـ Debug كمية كبيرة من الشيفرة المكررة، بحيث تمكن مشروع uv من تقليل حجمه بنحو 160KB.

تلميحات inline في حل derive الخاص بـ Rust

يستخدم مطورو Rust غالبًا ماكرو #[derive(...)] لتنفيذ السمات الأساسية مثل Debug وDisplay وClone. اكتشف المؤلف أن Rust يضيف حاليًا #[inline] لبعض هذه derive.

هذا السلوك غير مضمون، لكنه مذكور بشكل غير رسمي في المثال الوارد في الدليل، ويظهر عند فك الماكرو. في معظم الحالات يكون التلميح المولّد مرغوبًا، لأن التنفيذات المأخوذة عبر derive غالبًا صغيرة وتستفيد من التضمين. تظل السمة تلميحًا وليس أمرًا.

لماذا قد توسّع الأخطاء المتداخلة الشيفرة

التنفيذات الكبيرة لا تستفيد دائمًا من التضمين. أنتجت هرمية تحتوي على ثلاثة هياكل أخطاء وenum واحد من الأخطاء كمية كبيرة من الشيفرة لتنفيذات Debug المأخوذة عبر derive. كان يمكن تضمين جزء كبير من هذه الشيفرة في كل مرة يتم فيها استدعاء تنفيذ enum المستوى الأعلى.

قد تحدث مثل هذه الاستدعاءات عدة مرات أثناء تسجيل debug أو trace. وُصفت الهرمية في المثال بشكل مبسط بوضوح، لأن تطبيقات Rust الحقيقية غالبًا ما تحتوي على enum أخطاء متداخلة بعمق مع عدد غير قليل من الحقول. قد يمثل الشيفرة المضمنة الناتجة جزءًا غير قليل من الحجم الإجمالي للملف الثنائي لـ Rust.

تقليل حجم الملف الثنائي لـ uv

توصل المؤلف والفريق إلى أنهما يمكنهما تقليل الملف الثنائي لـ uv بنحو 160KB إذا لم يمنحا rustc القدرة على تضمين تنفيذ محدد لـ Debug. كانت النتيجة غير متوقعة، لأن تكلفة الحجم كانت تتراكم بسرعة، وrustc لم يكن يبدو أنه يحد من حجم الشيفرة المضمنة أو عدد عمليات التضمين.

لتحقيق التقليل، أضاف الفريق ماكرو إجرائي خاصًا يعمل مثل derive(Debug) لكنه يستخدم #[inline(never)]. توضح هذه الحالة كيف يمكن لتلميحات inline المولّدة أن تؤثر على حجم الملف الثنائي، عندما يُستخدم تنفيذ مأخوذ عبر derive لنوع متداخل بعمق.

SSiTech

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

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