Rui Ueyama, autor del enlazador LLVM lld y del compilador chibicc, presentó la primera versión estable del nuevo enlazador de alto rendimiento Mold, que supera notablemente en velocidad a los enlazadores GNU gold y LLVM lld. El proyecto es considerado listo para implementaciones en producción y puede utilizarse como una alternativa más rápida al enlazador GNU en sistemas Linux. Entre los planes para la próxima versión importante se destaca la preparación del soporte para la plataforma macOS, tras lo cual comenzará el trabajo para adaptar Mold para Windows.
Mold está escrito en C++ (C++20) y se distribuye bajo la licencia AGPLv3, que es compatible con GPLv3, pero no con GPLv2, ya que exige la divulgación de cambios cuando se desarrollan servicios en red. Esta elección se explica por el deseo de obtener financiamiento para el desarrollo; el autor está dispuesto a vender los derechos del código para su re-licenciamiento bajo una licencia permisiva como MIT o proporcionar una licencia comercial separada para aquellos que no están satisfechos con la AGPL.
Mold soporta todas las funcionalidades del enlazador GNU y se destaca por su rendimiento extremadamente alto: el enlace se realiza a una velocidad que es solo dos veces más lenta que la simple copia de archivos con la herramienta cp. Por ejemplo, al compilar Chrome 96 (con un tamaño de código de 1.89 GB), el enlace de archivos ejecutables con debuginfo en una computadora de 8 núcleos usando GNU gold toma 53 segundos, LLVM lld — 11.7 segundos, y Mold solo 2.2 segundos (26 veces más rápido que GNU gold). Al enlazar Clang 13 (3.18 GB) con GNU gold se requieren 64 segundos, con LLVM lld — 5.8 segundos, y con Mold — 2.9 segundos. Al enlazar Firefox 89 (1.64 GB) con GNU gold se necesitan 32.9 segundos, con LLVM lld — 6.8 segundos, y con Mold — 1.4 segundos.

Reducir el tiempo de enlace permite aumentar significativamente la comodidad del desarrollo de grandes proyectos al reducir el tiempo de espera en el proceso de creación de archivos ejecutables durante la depuración y prueba de cambios. El motivo para crear Mold fue la frustración por tener que esperar la finalización del enlace tras cada modificación en el código, así como la baja eficiencia de los enlazadores existentes en sistemas multinúcleo y el deseo de probar una arquitectura de enlace completamente diferente sin recurrir a modelos excesivamente complejos como el enlace incremental.
El alto rendimiento de la vinculación de archivos ejecutables a partir de un gran número de archivos objeto preparados por el compilador en Mold se logra mediante el uso de algoritmos más rápidos, la paralelización activa de operaciones entre los núcleos de CPU disponibles y la aplicación de estructuras de datos más eficientes. Por ejemplo, Mold implementa una técnica para realizar cálculos intensivos simultáneamente con la copia de archivos, precargando archivos objeto en memoria, utilizando tablas hash rápidas al resolver símbolos, escaneando tablas de relocación en un hilo separado y deduplicando secciones que se repiten en diferentes archivos.
Fuente: opennet.ru
