# فرق سرعة البناء بين Rust وZig في Bun يعود في جزء كبير منه إلى إعداد LTO

> **المغزى:** فرق نُسب إلى اللغة كان في جزء كبير منه فرق إعداد، والإعداد نفسه لم يكن في مستودع المشروع أصلًا، بل في مكتبة تُحمَّل جاهزة.

- المصدر: المغزى (https://almaghza.com/a/2026-09-14-bun-rust-zig-build-lto/)
- التاريخ: 3 ربيع الآخر - 14 سبتمبر 2026 (2026-09-14)
- القسم: برمجيات
- الوسوم: Bun، Rust، تحسين الأداء، CI/CD

أعلنت Bun أن بناء المشروع بعد انتقاله إلى Rust صار أسرع 5 مرات من بنائه بـ Zig على Linux، إذ انخفض من 30 دقيقة إلى 5 دقائق و37 ثانية. لكن مقالًا نشره Lalit Maganti في 12 سبتمبر 2026 يوضح أن جزءًا كبيرًا من هذا الفرق لا علاقة له باللغة.

بنى Maganti أداة اسمها buildprof، تسجّل كل عملية يشغّلها البناء وتضعها جميعًا على خط زمني واحد، ثم شغّلها على النسختين. وفي قياسه، استغرق بناء نسخة Zig نحو 24 دقيقة، منها 16 دقيقة و35 ثانية لخطوة الـ linker وحدها، وهي تعمل منفردة في نهاية البناء.

والسبب أن بناء Zig كان يستخدم Full LTO، في حين يستخدم بناء Rust نسخة ThinLTO. والـ LTO اختصار لـ link-time optimization، ومعناه أن الـ linker لا يكتفي بتجميع الملفات المترجمة، بل يعيد تحسين البرنامج كله. في Full LTO يجري ذلك في مهمة واحدة كبيرة، وفي ThinLTO يُقسَّم العمل ليجري بالتوازي.

لكن تغيير هذا الإعداد في Bun نفسها لم يوفّر سوى 4 دقائق. فقد تبيّن أن الـ linker كان يقضي معظم وقته في تحسين كود WebKit، وهي مكتبة لا تبنيها Bun بل تحمّلها جاهزة، وقد بُنيت في مكان آخر بـ Full LTO. وحين أعاد Maganti بناء WebKit بنفسه باستخدام ThinLTO، انخفض زمن البناء من 24 دقيقة إلى 15.

أي أن فرقًا قُدّم على أنه فرق لغة كان في جزء كبير منه فرق إعداد، والإعداد لم يكن في مستودع المشروع أصلًا.

وبالنسبة للفرق التي تنتظر دقائق طويلة في كل تشغيل للـ CI، يوضح المثال أن الوقت قد يذهب إلى خطوة واحدة أو إلى تبعية مبنية بإعداد لا يراه أحد. والأداة مفتوحة المصدر، وتعمل بإضافة buildprof -- قبل أمر البناء المعتاد.

## المصادر

- [مقال Lalit Maganti بجداول الأرقام](https://lalitm.com/post/buildprof/)
- [عارض buildprof التفاعلي](https://buildprof.lalitm.com/)
- [النقاش على Lobsters](https://lobste.rs/s/qsrjs2)
- [شرح LLVM لـ Link Time Optimization](https://llvm.org/docs/LinkTimeOptimization.html)
