LINUX.ORG.RU

Wild Linker 0.9

 , wild linker, ,


0

2

Состоялся релиз Wild Linker 0.9.0 — нового высокопроизводительного линковщика, написанного на Rust. Релиз отмечен на GitHub 23 мая 2026 года. Проект позиционируется как линковщик для ускорения итеративной разработки: в перспективе авторы хотят прийти к инкрементальной линковке, хотя в текущей версии она ещё не реализована. Код распространяется под двойной лицензией Apache 2.0 / MIT.

Главное изменение Wild 0.9 — поддержка Linker Plugin API, интерфейса, появившегося в Gold linker и также поддерживаемого GNU ld и Mold. Для Wild это открывает путь к linker-plugin LTO — оптимизации времени компоновки через подключаемый модуль линковщика. Разработчики отдельно уточняют, что это прежде всего полезно для проектов на C, C++ и смешанных кодовых баз, тогда как чистые Rust-проекты обычно делают LTO внутри компилятора. У поддержки пока есть известные проблемы, а линковка через плагин может быть медленной.

Значительная часть работ в 0.9 была связана с подготовкой к переносу Wild за пределы Linux/ELF. ELF-специфичная логика вынесена за абстракции, начата работа над поддержкой Mach-O и WebAssembly. Эти возможности пока не готовы для практического использования, но уже появились первые элементы: разбор Mach-O, обработка секций и сегментов, таблица символов, кодовая подпись, fat binary, а также начальная поддержка wasm-секций, символов и релокаций.

Основные изменения Wild Linker 0.9:

  • Поддержка linker plugins. Добавлена возможность работы с API плагинов линковщика, что нужно для linker-plugin LTO и совместимости с частью сценариев сборки из мира GCC/GNU ld/Mold. Также исправлены отдельные проблемы, связанные с callback-ами плагинов, --whole-archive, ThinLTO, лимитом открытых файлов и удалением мёртвого кода при LTO.

  • Серьёзное расширение поддержки linker scripts. Реализованы директивы PROVIDE и PROVIDE_HIDDEN, разбор и выполнение ASSERT, поддержка MEMORY, ORIGIN, LENGTH, LOADADDR, ALIGNOF, SEGMENT_START, суффиксов K и M в числовых литералах, логических, побитовых и унарных операторов, а также сопоставление по именам входных файлов. Это приближает Wild к совместимости со сложными скриптами линковки, которые часто встречаются в системном ПО и низкоуровневых проектах.

  • Улучшения для RISC-V, AArch64, x86-64 и LoongArch64. Добавлены RISC-V call relaxation, HI20 relaxation, R_RISCV_ALIGN, проверка конфликтующих расширений ISA, дополнительные релокации AArch64, range-extension thunks для AArch64, обработка ряда x86-64-релокаций с relaxations, а также уточнения по диапазонам и выравниванию для LoongArch64.

  • Новые параметры совместимости. Появилась поддержка --dependency-file, --auxiliary, --exclude-libs, --enable-new-dtags, --disable-new-dtags, --trace, --nmagic, --compress-debug-sections, --pack-dynamic-relocs=relr, --use-android-relr-tags, а также формы -o/path без пробела.

  • Генерация статически перемещаемых объектов. Добавлена поддержка создания static relocatables — промежуточных объектных файлов, которые ещё могут участвовать в дальнейшей линковке.

  • Улучшения производительности без акцента на «быстрый» релиз. Авторы прямо отмечают, что в 0.9 не было крупной работы над скоростью, но деградации также не произошло. Среди локальных оптимизаций — быстрый путь для неглобовых сопоставителей в version scripts, уменьшение числа атомарных операций, параллельный расчёт адресов секций и символов при сканировании relaxations и сокращение повторной обработки уже разрешённых секций.

  • Много исправлений совместимости. Исправлена обработка weak undefined symbols, .ctors/.dtors, RELRO, version scripts, SFrame, IFUNC, --version/-v, ошибок неопределённых символов, предупреждений, debug relocations, .eh_frame, SHT_SYMTAB_SHNDX, статической линковки dynamic object и ряда сценариев с linker scripts.

  • Документация и управление проектом. Добавлены кодекс поведения, политика использования LLM, governance-документация, матрица поддержки linker scripts, инструкция по использованию -fuse-ld=wild с GCC 16.1 и установка через Brew. Репозиторий также переехал в отдельную GitHub-организацию wild-linker.

На данный момент Wild официально ориентирован прежде всего на Linux и ELF. В README проекта заявлена поддержка x86-64, ARM64, RISC-V riscv64gc и начальная поддержка LoongArch64 на Linux; умеет собирать статические бинарники, static-PIE, динамически слинкованные исполняемые файлы и .so, работает с отладочной информацией, GNU jobserver и частью linker scripts. Инкрементальная линковка, более сложные linker scripts, Mach-O и Windows пока отнесены к нереализованным или незавершённым возможностям.

В практическом смысле Wild 0.9 — расширяет совместимость с существующей экосистемой сборки, начинает выходить за пределы ELF и получает поддержку сценариев, без которых линковщик трудно применять в крупных C/C++ и смешанных проектах. Для Rust-разработчиков Wild остаётся интересен как потенциальная база для будущей инкрементальной линковки, а для системных разработчиков — как ещё один быстрый конкурент GNU ld, LLD и Mold.

>>> Источник

★★★★★

Проверено: cetjs2 ()
Последнее исправление: dataman (всего исправлений: 2)
Ответ на: комментарий от cetjs2

Школота. Велосипедо-переписыватели никогда не успокоятся. Я вон тоже, хочу сделать из ардуинки термометр, влагомер и барометр - нет что бы купить готовый, так самому надо. Но я никуда свои поделки не тащу, в отличие от «ржавых».

drfaust ★★★★★
()

Класс. Как же раньше без этого жили.

BceM_IIpuBeT ★★☆☆☆
()

С чем совместим?

В тексте вижу про gcc 16.1 и то без подробностей)

Slackware_user ★★★★★
()

Нечем заняться им, как я понимаю?
Пусть обратятся, найдем им занятие.

Alphaer ★★
()
Последнее исправление: Alphaer (всего исправлений: 1)

Wild Linker

Уже можно на него с mold переходить?

devl547 ★★★★★
()
Ответ на: комментарий от devl547

Скорость линковки больших проектов уровня какого-нибудь Хрома.

Какая она (без сарказма)? И насколько её можно уменьшить?

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

Какая она (без сарказма)?

Линковка хромиума на Ryzen 9955HX (16С/32T, 5.4ггц в бусте):
lld - 6 секунд
mold - 2 секунды
wild - 1 секунда

Ну и прочее - https://github.com/wild-linker/wild/blob/main/benchmarks/ryzen-9955hx.md

Я хз как сейчас - но mold выстрелил тем, что он был многопоточным с самого начала. И за счёт этого сильно быстрее привычных gold/lld.

devl547 ★★★★★
()
Последнее исправление: devl547 (всего исправлений: 1)
Ответ на: комментарий от devl547

Как будто с линковкой подобного софта проблема не в скорости, а в жоре памяти, когда её не хватает.

Werenter ★★★
()
Ответ на: комментарий от devl547

mold выстрелил тем, что он был многопоточным с самого начала. И за счёт этого сильно быстрее привычных gold/lld.

lld же тоже написал автор mold.
А вообще интересно: rui314/mold/docs/design.md, хотя и «This document was written in 2020, and the contents are outdated».

dataman ★★★★★
()

В README проекта заявлена поддержка x86-64, ARM64, RISC-V riscv64gc и начальная поддержка LoongArch64 на Linux

Power всё?

VIT ★★
()
Ответ на: комментарий от Kroz

На работе есть бинари которые линкуются по полминуты GNU ld и за пару секунд через mold, это разница очень большая.

Gary ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.