Компоновка (линковка) — критический этап сборки программного обеспечения, на котором скомпилированные объектные файлы объединяются в единый исполняемый файл или разделяемую библиотеку. Несмотря на десятилетия инженерной работы над этой задачей, время линковки остаётся значимым узким местом в цикле «редактирование — компиляция — отладка», особенно для крупных программ на C++. Существующие линковщики используют лишь ограниченный параллелизм, оставляя большинство ядер процессора простаивать во время работы.

Руи Уэяма, автор линковщика mold для Unix/Linux, опубликовал статью, описывающую подход, при котором параллелизм по данным применяется систематически на всём протяжении конвейера линковки. В работе сначала разбираются архитектурные ограничения, которые мешают существующим линковщикам масштабироваться — в частности, взаимосвязанное разрешение символов и обработка архивов, — а затем показывается, как разработка «с чистого листа», развязывающая эти зависимости, преодолевает указанные ограничения.

На крупных реальных программах mold компонует многогигабайтные отладочные бинарники максимум за несколько секунд, а зачастую — менее чем за секунду. По приведённым в статье результатам, mold работает в 2.4–16.1 раза быстрее современного линковщика lld и до 112 раз быстрее традиционного GNU ld.

Отдельное исследование методом абляции (последовательного отключения оптимизаций) показало, что ни одна отдельная оптимизация не даёт решающего вклада в прирост производительности: ускорение складывается из совокупного эффекта параллелизации всех проходов компоновщика.

Linking is a critical step in the software build process that combines compiled object files into a single executable or shared library. Despite decades of engineering effort, link times remain a significant bottleneck in the edit-compile-debug cycle, particularly for large C++ programs.

Статья «mold: A Massively Parallel Linker» принята к публикации на конференции ASPLOS 2027 и насчитывает 15 страниц, включает 3 иллюстрации и 10 таблиц с результатами тестов.