mold - محرر الأداء العالي الحديث
mold (Modern Linker) هو بديل إسقاط في النهاية لـ GNU ld و gold و LLVM lld تم تصميمه من البداية لاستخدام كل نوى المعالج. الربط غالبًا هو ذيل متسلسل من بناء بخلاف ذلك متوازي — تجمّع 200 ملف عبر 16 نوى في عشرين ثانية، ثم انتظر على نوى واحد للربط. mold يوازي هذه الخطوة، وبالتالي يقلل أوقات الربط عادة بمقدار حجم، والتي تكون أكثر وضوحًا في حلقات التحرير والتجميع والتشغيل على أكواد C و C++ و Rust الكبيرة.
التثبيت
| النظام الأساسي | الأمر |
|---|
| Debian/Ubuntu | sudo apt install mold |
| Fedora | sudo dnf install mold |
| Arch Linux | sudo pacman -S mold |
| macOS (Homebrew) | brew install mold |
| من المصدر | بناء من مستودع rui314/mold |
| التحقق | mold --version |
استخدام mold (ثلاث طرق)
| الطريقة | كيف |
|---|
| محول | mold -run cargo build / mold -run make |
| علم المجمع | -fuse-ld=mold (GCC 12+/Clang) |
| رابط رمزي | أشر ld على mold (في جميع أنحاء النظام) |
# الأسهل: لف أي أمر بناء
mold -run make -j$(nproc)
mold -run cargo build --release
إعدادات Rust
# ~/.cargo/config.toml أو مشروع .cargo/config.toml
[target.x86_64-unknown-linux-gnu]
linker = "clang"
rustflags = ["-C", "link-arg=-fuse-ld=mold"]
| النهج | ملاحظة |
|---|
link-arg=-fuse-ld=mold | قياسي، يتطلب clang أو GCC 12+ |
mold -run cargo build | لا توجد تغييرات في الإعدادات المطلوبة |
| قسم لكل هدف | يبقي الأنظمة الأخرى غير متأثرة |
إعدادات C/C++
# علم المجمع المباشر
gcc -fuse-ld=mold main.c -o main
clang++ -fuse-ld=mold app.cpp -o app
# CMake
cmake -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=mold" ..
# Makefile
LDFLAGS += -fuse-ld=mold
التحقق من استخدام mold
# التحقق من المحرر المسجل في قسم التعليق الثنائي
readelf -p .comment ./my-binary | grep -i mold
# أو الجري مع إحصائيات mold
mold -run cargo build 2>&1 | tail
خيارات مفيدة
| الخيار | التأثير |
|---|
--threads=N | حدد خيوط العمل |
-run CMD | لف أمر البناء |
--perf | اطبع انهيار الأداء |
--stats | بث إحصائيات الربط |
--gc-sections | إزالة الأقسام غير المستخدمة |
--icf=all | طي الكود المتطابق (ملفات ثنائية أصغر) |
# شاهد أين يذهب وقت الربط
mold --perf -run cargo build --release
متى يساعد mold الأكثر
| الحالة | الفائدة |
|---|
| ملفات ثنائية كبيرة مع العديد من الكائنات | أكبر الادخارات المطلقة |
| الإعادة المتزايدة المتكررة | أكبر كسب جودة الحياة |
| الأبنية المنقحة (جداول رمزية كبيرة) | ملحوظ جدًا |
| العديد من نوى المعالج المتاحة | يتسع مع النوى |
| المشاريع الصغيرة | هامشي — الربط كان بالفعل سريع |
الترخيص وملاحظات النظام الأساسي
| ملاحظة | التفاصيل |
|---|
| الترخيص | MIT (الإصدارات الحديثة) |
| Linux | مدعوم بالكامل، الهدف الأساسي |
| macOS | مدعوم؛ محرر Apple الخاص بهم تحسّن أيضًا |
| Windows | ليس الهدف الأساسي |
mold مقابل محررات أخرى
| المحرر | السرعة النسبية | ملاحظة |
|---|
| GNU ld | الخط الأساسي (أبطأ) | افتراضي في العديد من الأنظمة |
| gold | أسرع من ld | تم استبدالها إلى حد كبير |
| lld (LLVM) | أسرع بكثير | افتراضي جيد، مدعوم جيدًا |
| mold | الأسرع | الأفضل للروابط المتوازية الكبيرة |
اجمع مع sccache للفوز الكامل: sccache يتجنب إعادة التجميع، mold يسرع الربط المتبقي.
الموارد