Mold 1.1 ya fue liberado, conoce las novedades de este Linker moderno superior a GNU gold y LLVM
Hace ya varios dias se dio a conocer la liberación de la nueva versión del Linker moderno Mold 1.1, que se puede utilizar como un reemplazo transparente más rápido para el enlazador GNU en sistemas Linux.
En esta nueva versión de mold 1.1 es una versión que contiene funciones nuevas, correcciones de errores y mejoras de rendimiento.
Sobre Mold
Mold admite todas las características del enlazador GNU y tiene un rendimiento muy alto, ya que los enlaces que realiza tienen una velocidad solo dos veces más lenta que simplemente copiar archivos con la utilidad cp.
De esta forma el reducir el tiempo de compilación permite mejorar significativamente la conveniencia de desarrollar grandes proyectos al reducir el tiempo de espera en el proceso de generación de archivos ejecutables al depurar y probar cambios.
La motivación para crear Mold fue la molestia de tener que esperar a que se completara el enlace después de cada cambio 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 fundamentalmente diferente sin recurriendo a modelos innecesariamente complicados como el enlace incremental.
El alto rendimiento de vincular un archivo ejecutable de una gran cantidad de archivos de 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 el uso 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, cargando archivos de objetos de manera proactiva en la memoria, usando tablas hash rápidas al resolver caracteres, escaneando tablas de reubicación en una secuencia separada y deduplicando secciones que se repiten en diferentes archivos.
Principales novedades de Mold 1.1
En esta nueva versión que se presenta de Mold 1.1 se destaca que se agregó el soporte para la optimización en la etapa de vinculación (LTO, Link Time Optimization).
Las optimizaciones de LTO difieren al tener en cuenta el estado de todos los archivos involucrados en el proceso de compilación, mientras que los modos de optimización tradicionales optimizan cada archivo individualmente y no tienen en cuenta las condiciones para llamar a las funciones definidas en otros archivos.
Anteriormente, cuando se encontraban archivos de código intermedio (IR) GCC o LLVM, se invocaban los enlazadores ld.bfd o ld.lld apropiados, pero ahora Mold maneja los archivos IR por su cuenta y usa la API del complemento Linker, también utilizada en GNU ld y enlazadores de oro GNU. La velocidad cuando LTO está habilitado es solo marginalmente más rápida que otros enlazadores, ya que la mayor parte del tiempo se dedica a optimizar el código, no a vincular.
Tambien se destaca que se agregaron las opciones «–print-dependencies» y «–print-dependencies=full» para generar información en formato CSV sobre las dependencias entre los archivos de entrada, que, por ejemplo, se pueden usar para analizar los motivos de conexión al vincular ciertos archivos de objetos o durante trabajar para minimizar las dependencias entre archivos.
Otro de los cambios que se destaca de la nueva eversión, es que se agregó el soporte para la arquitectura RISC-V (RV64) en las plataformas host y de destino.
Ademas de ello, tambien podremos encontrar que se agregó la opción «–emit-relocs» para habilitar la copia de secciones de reubicación de direcciones de archivos de entrada a archivos finales para que se apliquen optimizaciones posteriores en la etapa posterior a la vinculación.
De los demás cambios que se destacan:
- Se agregó la opción «–shuffle-sections» para aleatorizar el orden de las secciones antes de fijar sus direcciones en el espacio de direcciones virtuales.
- Se agregaron las opciones «–warn-once» y «–warn-textrel».
- Se eliminó la dependencia de libxxhash.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.
¿Como instalar Mold?
Para los que estén interesados en poder trabajar con Mold, pueden obtener la utilidad descargando y compilando el código fuente. Para ello basta con abrir una terminal y teclear lo siguiente:
git clone https://github.com/rui314/mold.git
cd mold
git checkout v1.1.1
make -j$(nproc) CXX=clang++
sudo make install
Para conocer el uso de Mold, puedes consultar la documentación en este enlace.