
Zig: إعادة هيكلة نظام البناء — فصل الإعداد عن التنفيذ
يشرح devlog مشروع Zig عملية إعادة هيكلة واسعة تفصل إعداد build.zig عن تنفيذ مخطط البناء، ما قلّص زمن zig build -h بنحو 90%. ويُتوقع صدور الإصدار 0.17.0 خلال أسبوعين مع بقاء مجال للتصحيحات في 0.17.1.
أجرى مشروع Zig تغييراً واسعاً في نظام البناء: فُصلت عملية إعداد البناء عن العملية التي تنفّذه. ويصف أندرو كيلي، مبتكر اللغة، هذا الفرع في devlog المشروع بأنه معاينة لملاحظات الإصدار المقبل وإشعار مبكر لمن يريد تجربة التغيير قبل صدور Zig 0.17.0.
configurer وmaker
سابقاً كانت ملفات build.zig وتنفيذ نظام البناء تُصرَّف في عملية واحدة متضخّمة بوضع Debug، وبعد أن يبني السكربت مخطط البناء في الذاكرة ينفّذه كود build runner. أما الآن فيُصرَّف السكربت في عملية صغيرة هي configurer التي تعمل أيضاً بوضع Debug. وعندما يصبح المخطط جاهزاً يُسلسَل في ملف إعدادات ثنائي يحتفظ به في الذاكرة المؤقتة عملية zig build الأم. وفي الوقت نفسه يصرّف Zig بشكل غير متزامن العملية التي تنفّذ المخطط، أي maker، مع تفعيل التحسينات، ثم ينفّذ maker المخطط المسلسَل.
وبفضل الذاكرة المؤقتة العامة يكفي تصريف maker مرة واحدة لكل إصدار من Zig. وقد دفع ثلاثة أهداف إلى هذا الفصل: لم يعد يُصرَّف عند كل تغيير سوى منطق build.zig بدل نظام البناء كاملاً، وهو أمر أهم الآن مع وجود --watch و--fuzz و--webui؛ ويستطيع النظام تخطي إعادة تشغيل السكربت كلياً حين يعرف أن شيئاً لن يتغير؛ وتُبنى عملية تنفيذ المخطط مع تفعيل التحسينات.
قياسات: من 150 ميلي ثانية إلى 14
الأثر المقاس حاد: كان أمر zig build -h يستغرق 150 ميلي ثانية وسطياً قبل التغيير و14.3 بعدها، أي انخفاضاً بنحو 90.4% في زمن التنفيذ. وتراجعت دورات المعالج بنسبة 95.9% والتعليمات بنسبة 95.6% والذاكرة في الذروة بنسبة 7.4%. وسبب المكسب هو إعادة استخدام الإعدادات المسلسَلة المخزّنة بدل تشغيل سكربت البناء في كل استدعاء.
ما الذي ينكسر وما القادم
إلى جانب الأداء، يتوقع الكاتب أن تستفيد أدوات خارجية مثل ZLS من قراءة ملف الإعدادات المسلسَل بدل صيانة نسخة متفرعة من build runner. ويعيد التغيير هيكلة الآليات الداخلية بعمق لكنه لا يكسر التوافق تقريباً على مستوى واجهة API، مع استثناءات مذكورة في طلب السحب. وأبرزها أن سكربتات البناء لم تعد تستطيع قراءة وسائط سطر الأوامر عبر b.args، بل تمرّرها بـ run_cmd.addPassthruArgs()، وهو ما يلغي إحدى الإمكانات لكنه يعني أن تغيير تلك الوسائط لم يعد يستلزم إعادة تصريف السكربت.
ويُتوقع صدور Zig 0.17.0 خلال أسبوعين، مع بقاء مجال للتصحيحات في 0.17.1 أيضاً.
SiTech — تطوير ويب مدعوم بالذكاء الاصطناعي
نبني مواقع سريعة وعصرية وندمج الذكاء الاصطناعي في سير عمل الشركات. لديك مشروع أو سؤال؟ يسعدنا مساعدتك.