Устаешь ждать, но насколько хуже было бы, если бы ждать стало нечего (Б. Шоу).

Высокоскоростной компоновщик mold 3.0, переписанный в Rust


Высокоскоростной компоновщик mold 3.0, переписанный в Rust

Высокоскоростной компоновщик форм, высокопроизводительная замена существующих компоновщиков Unix, предназначенная для ускорения сборок, достигла версии 3.0, что знаменует собой важную веху, поскольку проект завершает переход с C ++ на Rust. Проект разработан Руи Уэямой, первоначальным автором LLVM lld linker.

По словам разработчиков, Mold 3.0 — это первая версия, основанная на новой реализации на языке Rust, в то время как версия 2.42.1 остается последней версией, собранной на основе старой кодовой базы на C++.

Mold 3.0 принимает те же параметры командной строки, поддерживает те же целевые архитектуры и должна выдавать тот же результат, за исключением исправлений ошибок, включенных в релиз. Разработчики также отмечают, что производительность компоновки осталась на уровне предыдущей версии на C++.

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

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

В то же время mold перестал зависеть от oneTBB. Он продолжает статически связывать mimalloc по умолчанию, хотя пользователи могут выбрать системный распределитель при создании компоновщика.

Помимо переписывания на Rust, в mold 3.0 внесено множество улучшений, связанных с совместимостью, и исправлений ошибок. В их числе исправления для сбоев, связанных со статически связанными исполняемыми файлами и скриптами версий, исправления для поврежденного вывода, когда выходной файл также используется в качестве входного, исправления для нескольких недетерминированных случаев вывода и исправления для множества проблем, связанных с перемещаемым связыванием с помощью опции -r.

Улучшена совместимость с GNU ld в нескольких областях, включая синтаксический анализ параметров командной строки, обработку версий символов и поведение при перемещении. Некоторые случаи, которые ранее приводили к некорректному выводу или сбоям, теперь отклоняются с соответствующими сообщениями об ошибках.

Наконец, исправления, относящиеся к конкретной архитектуре, охватывают AArch64, ARM32, i386, RISC-V, LoongArch, PPC32, PPC64, m68k, SH4 и SPARC64. В выпуске также добавлена поддержка дополнительных типов перемещения в AArch64 и ARM32 и решен ряд проблем, связанных с перемещением и TLS, в RISC-V и LoongArch.

Заглядывая в будущее, разработчики mold говорят, что более масштабная цель серии 3.x* — устранить оставшиеся проблемы совместимости с GNU ld, особенно в том, что касается скриптов компоновщика. В конечном счете проект надеется, что эта работа поможет сделать mold компоновщиком по умолчанию в дистрибутивах Linux.

Более подробная информация о mold 3.0 доступна в списке изменений выпуска.

Редактор: AndreyEx

Если статья понравилась, поделитесь ей в социальных сетях

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала