Майбутнє 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 доступно в змінному журналі випуску.




