Wild Linker 0.9 — быстрый линкер на Rust стал ближе к серьёзным C/C++-проектам

Wild Linker 0.9 получил поддержку linker plugin API, расширил работу с linker scripts и сделал шаг к будущей поддержке Mach-O и WebAssembly. Для обычного читателя это новость из «невидимого» слоя разработки: такие инструменты не запускают приложения, но влияют на скорость сборки, удобство разработки и качество системного ПО.

Wild Linker 0.9 — быстрый линкер на Rust
Wild Linker 0.9 — быстрый линкер на Rust

Wild Linker укрепляет роль альтернативного линкера для Linux-разработки

Wild Linker — это линкер, написанный на Rust. Линкер нужен на финальном этапе сборки программы: он собирает скомпилированные части проекта, библиотеки и служебную информацию в итоговый исполняемый файл или библиотеку.

Если упростить, компилятор готовит детали, а линкер собирает из них готовый механизм. Поэтому скорость и корректность линкера особенно важны для больших проектов, где разработчик десятки раз в день запускает сборку, тесты и проверку изменений.

В версии 0.9 проект не заявляет о большом скачке производительности. Разработчики прямо отмечают, что существенной работы именно над скоростью в этом релизе не было, но важно другое: Wild становится совместимее с реальными сценариями сборки, где используются сложные настройки, разные архитектуры и не только Rust-код.

Linker plugin API открывает путь к LTO для смешанных проектов

Главное изменение Wild Linker 0.9 — поддержка linker plugin API. Это механизм, который изначально появился вокруг Gold linker и также поддерживается GNU ld и Mold.

На практике это важно для LTO — link-time optimization. Это оптимизация на этапе линковки, когда инструмент видит не отдельные файлы по одному, а более цельную картину программы. За счёт этого он может лучше убрать лишний код, эффективнее связать части приложения и иногда улучшить итоговую производительность.

Разработчики Wild отдельно подчёркивают важную деталь: чистые Rust-проекты обычно меньше зависят от linker plugins, потому что Rust умеет делать LTO внутри компилятора. Поэтому новая возможность особенно полезна для C, C++ и смешанных проектов, где Rust может быть только одной частью общей кодовой базы.

При этом использовать новую возможность бездумно не стоит. В релизных заметках указано, что при работе через linker plugin время линковки будет очень медленным, а у функции ещё есть известные проблемы. То есть это не кнопка «сделать всё быстрее», а шаг к совместимости с более сложными сборочными сценариями.

Поддержка linker scripts делает Wild полезнее для системного кода

В Wild Linker 0.9 заметно расширена поддержка linker scripts. Это специальные файлы, которые описывают, как именно должны быть разложены секции программы в памяти и итоговом бинарном файле.

Для обычных приложений разработчик часто вообще не видит linker script. Но в низкоуровневой разработке, системном программировании, embedded-сценариях, сборке рантаймов и некоторых Linux-компонентов такие настройки могут быть критически важны.

В список изменений вошли, например, поддержка PROVIDE и PROVIDE_HIDDEN, обработка ASSERT, LOADADDR, ALIGNOF, SEGMENT_START, выражений с битовыми и логическими операторами, а также MEMORY-блоков. Это звучит узко, но именно такие детали отделяют экспериментальный инструмент от линкера, который можно пробовать в более требовательных проектах.

RISC-V, AArch64 и LoongArch64 получили важные низкоуровневые улучшения

Релиз 0.9 затрагивает несколько архитектур. Для RISC-V добавлены улучшения вокруг relaxations — оптимизаций, которые позволяют заменить часть инструкций или обращений более короткими и эффективными вариантами, если итоговое расположение кода это позволяет.

Для AArch64 реализованы range-extension thunks. Это вспомогательные переходные конструкции, которые нужны, когда прямой переход в машинном коде не может достать до нужного адреса из-за ограничений расстояния.

Для LoongArch64 добавлены уточнения по допустимым диапазонам и выравниванию согласно спецификации. Всё это не выглядит как функция для конечного пользователя, но для компиляторов, сборочных систем и дистрибутивов такие изменения важны: они повышают шанс, что проект соберётся корректно на разных платформах.

Портирование на macOS и WebAssembly началось, но пока не готово к использованию

Команда Wild отдельно выделила работу по портированию. Внутренний код перерабатывали так, чтобы поведение, связанное с ELF, было отделено от более общих частей линкера.

ELF — это основной формат исполняемых файлов и библиотек в Linux. Но macOS использует Mach-O, а WebAssembly живёт в своей отдельной модели. Пока поддержка Mach-O и WebAssembly не готова для практического использования, но сам факт движения в эту сторону важен: Wild постепенно перестаёт быть инструментом, мыслящим только в рамках одного формата.

При этом Windows в списке неподдерживаемых крупных направлений всё ещё остаётся отдельной задачей. В README проекта среди рабочих платформ указаны Linux-сценарии для x86-64, ARM64, RISC-V и начальная поддержка LoongArch64, а среди ещё не завершённых направлений — incremental linking, более сложные linker scripts, Mach-O и Windows.

Разработчикам стоит воспринимать 0.9 как релиз совместимости, а не как массовую замену ld

Wild Linker 0.9 не нужно воспринимать как сигнал немедленно менять линкер во всех проектах. Это скорее важный промежуточный релиз: проект закрывает пробелы совместимости, расширяет поддержку сложных сценариев и готовит основу для будущих платформ.

Кому стоит присмотреться к Wild уже сейчас:

  • разработчикам Rust-проектов на Linux, которые экспериментируют со скоростью сборки;
  • авторам C/C++ и mixed-language проектов, которым интересна поддержка linker plugin LTO;
  • разработчикам системного ПО, где важны linker scripts и нестандартная раскладка секций;
  • энтузиастам RISC-V, AArch64 и альтернативных архитектур;
  • мейнтейнерам, которым важно понимать, куда движутся современные инструменты сборки.

Для продакшена подход должен быть осторожным: сначала тестирование в CI, затем сравнение результата с привычными GNU ld, LLD или Mold, и только потом переход в рабочих сборках.

Итоговый смысл релиза — Wild становится взрослее как инфраструктурный инструмент

Wild Linker 0.9 — не релиз с одной яркой пользовательской кнопкой. Его значение в другом: проект постепенно закрывает сложные технические пробелы, без которых линкер трудно использовать за пределами простых сценариев.

Поддержка linker plugin API, расширение linker scripts, улучшения для RISC-V и AArch64, а также ранняя работа над Mach-O и WebAssembly показывают направление развития. Wild пока не заменяет все зрелые линкеры, но становится всё более серьёзным кандидатом для разработчиков, которым важны скорость сборки, Rust-реализация и долгосрочная идея incremental linking.

При использовании материалов сайта необходимо указывать ссылку на TGLand.ru. Если вы копируете фрагменты текста в интернете, прямая гиперссылка, доступная для индексации поисковыми системами, должна быть размещена в начале материала.

Вам также может понравиться