لینکر Mold 3.0 منتشر شده است و میتواند به عنوان جایگزینی سریعتر و شفافتر برای لینکر GNU مورد استفاده قرار گیرد. Linux-systems. این پروژه توسط روی اویاما، نویسندهی لینکر LLVM lld، در حال توسعه است. ویژگی کلیدی Mold سرعت بسیار بالای لینکدهی آن است که به طور قابل توجهی از لینکرهای GNU gold و LLVM lld بهتر عمل میکند (لینکدهی در Mold تنها نصف سرعت کپی کردن فایلها با ابزار cp است). کد با زبان Rust نوشته شده و تحت مجوز MIT توزیع شده است.
کاهش زمان پیوند، با کاهش زمان انتظار در طول تولید فایلهای اجرایی هنگام اشکالزدایی و آزمایش تغییرات، قابلیت استفاده از پروژههای بزرگ را به طور قابل توجهی بهبود میبخشد. انگیزه ایجاد Mold ناشی از ناامیدی از انتظار برای تکمیل پیوند پس از هر تغییر کد، عملکرد ضعیف پیونددهندههای موجود در سیستمهای چند هستهای و تمایل به امتحان کردن یک معماری پیوند اساساً متفاوت بدون توسل به مدلهای بیش از حد پیچیده مانند پیوند افزایشی بود.
Mold با استفاده از الگوریتمهای سریعتر، موازیسازی فعال عملیات در هستههای CPU موجود و بهکارگیری ساختارهای داده کارآمدتر، به عملکرد بالایی در کامپایل فایلهای اجرایی از تعداد زیادی از فایلهای شیء آمادهشده توسط کامپایلر دست مییابد. به عنوان مثال، Mold تکنیکی را برای انجام محاسبات فشرده همزمان با کپی کردن فایل، بارگذاری پیشگیرانه فایلهای شیء در حافظه، استفاده از جداول هش سریع برای تفکیک نمادها، اسکن جداول جابجایی در یک رشته جداگانه و حذف بخشهای تکراری ادغامشده در فایلهای مختلف پیادهسازی میکند.
شاخه Mold 3.0 به دلیل بازنویسی کدبیس از C++ (C++20) به Rust قابل توجه است. Mold 3.0 میتواند به عنوان جایگزینی شفاف برای Mold 2.42.1، آخرین نسخه C++، استفاده شود و از تمام گزینهها و معماریهای هدف موجود قبلی پشتیبانی میکند. انتقال به Rust امکان محافظت از پروژه در برابر مشکلات احتمالی هنگام مدیریت فایلهای شیء خراب را فراهم کرده است - در شرایطی که نسخه C++ به دلیل دسترسی خارج از محدوده از کار میافتد، پیادهسازی Rust در مرحله بررسی محدوده متوقف میشود. عملکرد پیادهسازی Rust با نسخه C++ برابری میکند.
علاوه بر مهاجرت به Rust، هدف کلیدی در توسعه شاخه ۳.۰، بهبود سازگاری با GNU ld و آمادهسازی پروژه برای استفاده به عنوان لینکر پیشفرض در توزیعها بود. Linuxسیستم ساخت با Cargo جایگزین شده است، و سیستم تست با cargo test جایگزین شده و ctest را جایگزین کرده است. کتابخانه oneTBB از وابستگیها حذف شده است.
منبع: opennet.ru
