Майбутнє mold: Випуск версії 3.0 та перехід на Rust

Майбутнє mold: Випуск версії 3.0 та перехід на Rust

Швидкісний mold linker, що є високопродуктивною заміною для існуючих Unix-лінкерів, досяг версії 3.0. Це великий етап, оскільки проєкт завершує перехід з C++ на Rust. Розробкою займається Руй Уейяма, оригінальний автор lld-лінкера LLVM.

Основні зміни в mold 3.0

За словами розробників, mold 3.0 — це перше випуск на основі нової реалізації Rust, тоді як версія 2.42.1 залишилась останньою, створеною на старій C++ кодовій базі. Mold 3.0 приймає ті ж самі параметри командного рядка, підтримує ті ж самі архітектури і має залишити вихідні дані такими ж, за винятком виправлень помилок, включених в реліз.

Перехід на Rust також покращує обробку пошкоджених вхідних файлів. У попередній реалізації C++ некоректні дані могли викликати зчитування пам’яті поза межами правильних значень. У версії Rust ці доступи перевіряються на межі, що дозволяє mold зупинятися при несправній операції.

Зміни для користувачів, що збирають mold з джерел

Для користувачів, які збирають mold з джерел, є значні зміни. Проєкт перейшов з CMake на Cargo, що вимагає Rust 1.95 або новішу версію поряд з C-компилятором. Діючі опції конфігурації CMake зникли, а вибір цілей тепер здійснюється через функції Cargo.

Mold також відмовився від залежності на oneTBB, при цьому зберіг статичне зв’язування з mimalloc за замовчуванням, хоча користувачі можуть вибрати системний аллокатор при збірці лінкера.

Поліпшення та виправлення в mold 3.0

Окрім переписування на Rust, mold 3.0 містить численні покращення з сумісності та виправлення помилок. Це включає виправлення аварій, що стосуються статично зв’язаних виконуваних файлів та версійних скриптів, проблеми з вихідними файлами, що також використовуються як вхідні файли, кілька ненавмисних випадків виходу та численні проблеми, що впливають на релокацію з параметром -r.

Сумісність з GNU ld покращилась у кількох аспектах, включаючи парсинг параметрів командного рядка, обробку версій символів і поведінку перекладення. Деякі випадки, що раніше викликали некоректні виходи або збої, тепер відхиляються з відповідними помилками.

Архітектурні виправлення у mold 3.0

Остаточно, архітектурні виправлення охоплюють AArch64, ARM32, i386, RISC-V, LoongArch, PPC32, PPC64, m68k, SH4 та SPARC64. Реліз також додає підтримку додаткових типів релокації для AArch64 та ARM32 і виправляє кілька проблем, пов’язаних з релокацією та TLS на RISC-V і LoongArch.

Погляд у майбутнє mold

На майбутнє, розробники mold зазначають, що ширша мета серії 3.x полягає в закритті залишкових сумісних розривів з GNU ld, особливо в обробці скриптів лінкера. Врешті-решт, проєкт сподівається, що ця робота допоможе зробити mold стандартним лінкером у дистрибутивах Linux.

Більше деталей про mold 3.0 доступно в змінному журналі випуску.