لینکر Mold 3.0 منتشر شد: حالا با Rust بازنویسی شده
حدود ۲ دقیقه مطالعه
چی عوض شده؟
Rui Ueyama، سازندهی لینکر Mold، نسخهی 3.0 رو ۵ اکتبر منتشر کرد. این نسخه یه بازنویسی کامله: کل پروژه که تا حالا با C++ نوشته میشد، حالا با Rust ساخته شده. تیم Mold این نسخه رو یه جایگزین مستقیم (drop-in) برای 2.42.1، آخرین نسخهی C++، معرفی کرده. یعنی همون آپشنهای خط فرمان، همون معماریهای هدف و خروجی معادل، بهجز باگهایی که همزمان درست شدن.
تغییرات فنی
سیستم بیلد از CMake به Cargo رفته و برای ساختنش به Rust نسخهی 1.95 یا جدیدتر و یه کامپایلر C نیاز داری. وابستگی به oneTBB اینتل هم حذف شده، ولی mimalloc هنوز آلوکیتور پیشفرضه و میتونی آلوکیتور سیستم رو هم انتخاب کنی. یه مزیت مهم Rust اینه که دسترسی به حافظه چک میشه، پس فایلهای ورودی خراب دیگه نباید باعث segfault بشن. سرعت لینک کردن هم طبق گزارشها در حد نسخهی C++ مونده؛ بنچمارک مستقلی ندیدم و عدد مشخصی برای مقایسه ندارم.
بین باگهای رفعشده، کرش با version script در اجراییِ استاتیک، خروجی خراب وقتی یه فایل هم ورودی باشه هم خروجی، و خروجی غیرقطعی در فایلهای dependency و گروههای COMDAT دیده میشه. چند باگ مخصوص معماریهایی مثل ARM، RISC-V و PPC64 هم درست شده. طبق گفتهی تیم، تستها روی همهی تارگتهای پشتیبانیشده اجرا شده و همهی پکیجهای Gentoo هم با نسخهی جدید بیلد شدن، بدون رگرسیون.
هدف نسخههای 3.x
هدف سری 3.x بستن شکافهای باقیمونده با GNU ld هست، مخصوصاً پشتیبانی از linker script. این کار برای کرنلها و برنامههای embedded مهمه و هدف بلندمدتش اینه که توزیعهای لینوکس Mold رو لینکر پیشفرض کنن. فعلاً اون قابلیتها کامل نیستن و باید منتظر نسخههای بعدی بمونیم.
منابع:
