Wild Linker 0.9

la liberación tuvo lugar Wild Linker 0.9.0 — Un nuevo enlazador de alto rendimiento escrito en Rust. La versión está disponible en GitHub. 23 mayo del año 2026El proyecto se concibe como un enlazador para acelerar el desarrollo iterativo: los autores buscan, en última instancia, lograr el enlace incremental, aunque aún no está implementado en la versión actual. El código se distribuye bajo una licencia dual. Apache 2.0 / MIT.

El principal cambio en Wild 0.9 es el soporte API del complemento Linker, una interfaz introducida en el enlazador Gold y también compatible con GNU ld y Mold. Para Wild, esto abre el camino a complemento de enlace LTO — Optimizaciones en tiempo de enlace mediante un complemento del enlazador. Los desarrolladores especifican que esto es útil principalmente para proyectos en C, C++ y de código mixto, mientras que los proyectos puramente en Rust suelen realizar la optimización en tiempo de enlace internamente. La compatibilidad con esta función aún presenta problemas conocidos, y el enlace mediante el complemento puede ser lento.

Una parte significativa del trabajo en 0.9 estuvo relacionada con los preparativos para la transferencia de Wild más allá Linux/ELF. La lógica específica de ELF se ha trasladado fuera de las abstracciones y se ha comenzado a trabajar en su compatibilidad. Macho и WebAssemblyEstas capacidades aún no están listas para su uso práctico, pero ya han aparecido los primeros elementos: análisis sintáctico Mach-O, procesamiento de secciones y segmentos, tabla de símbolos, firma de código, binario fat, así como soporte inicial para secciones, símbolos y reubicaciones de wasm.

Cambios clave en Wild Linker 0.9:

  • Compatibilidad con complementos de enlazador. Se agregó compatibilidad con las API de los complementos del enlazador, lo cual es necesario para la LTO de los complementos del enlazador y la compatibilidad con algunos scripts de compilación de GCC/GNU ld/Mold. También se corrigieron algunos problemas relacionados con las devoluciones de llamada de los complementos, incluyendo el archivo completo, ThinLTO, el límite de archivos abiertos y la eliminación de código muerto durante la LTO.

  • Ampliación importante del soporte para scripts de enlace. Se implementan las directivas PROVIDE y PROVIDE_HIDDEN, el análisis y la ejecución de ASSERT, la compatibilidad con los sufijos MEMORY, ORIGIN, LENGTH, LOADADDR, ALIGNOF, SEGMENT_START, K y M en literales numéricos, operadores lógicos, bit a bit y unarios, y la coincidencia por nombres de archivo de entrada. Esto acerca a Wild a la compatibilidad con los complejos scripts de enlace que se encuentran frecuentemente en software de sistema y proyectos de bajo nivel.

  • Mejoras para RISC-V, AArch64, x86-64 y LoongArch64. Se agregó relajación de llamadas RISC-V, relajación HI20, R_RISCV_ALIGN, comprobación de extensiones ISA conflictivas, reubicaciones AArch64 adicionales, funciones thunk de extensión de rango para AArch64, manejo de varias reubicaciones x86-64 con relajaciones y aclaraciones de rango y alineación para LoongArch64.

  • Nuevas opciones de compatibilidad. Se agregó soporte para --dependency-file, --auxiliary, --exclude-libs, --enable-new-dtags, --disable-new-dtags, --trace, --nmagic, --compress-debug-sections, --pack-dynamic-relocs=relr, --use-android-relr-tags y la forma sin espacios -o/path.

  • Generación de objetos en movimiento estático. Se ha añadido compatibilidad para crear archivos reubicables estáticos: archivos de objetos intermedios que aún pueden participar en la vinculación posterior.

  • Mejoras en el rendimiento sin centrarse en un lanzamiento "rápido". Los autores señalan explícitamente que la versión 0.9 no incluyó mejoras significativas en el rendimiento, pero tampoco hubo degradación. Las optimizaciones locales incluyen una ruta rápida para comparadores no globales en los scripts de versiones, una reducción en el número de operaciones atómicas, el cálculo paralelo de direcciones de secciones y símbolos durante los escaneos de relajación y una reducción del reprocesamiento de secciones ya resueltas.

  • Numerosas correcciones de compatibilidad. Se corrigió el manejo de símbolos débiles no definidos, .ctors/.dtors, RELRO, scripts de versión, SFrame, IFUNC, --version/-v, errores de símbolos no definidos, advertencias, reubicaciones de depuración, .eh_frame, SHT_SYMTAB_SHNDX, enlace estático de objetos dinámicos y varios escenarios con scripts de enlazador.

  • Documentación y gestión de proyectos. Se han añadido un código de conducta, una política de uso de LLM, documentación de gobernanza, una matriz de compatibilidad de scripts de enlazador, instrucciones para usar -fuse-ld=wild con GCC 16.1 y la instalación mediante Brew. El repositorio también se ha trasladado a una organización de GitHub independiente, wild-linker.

En la actualidad Wild oficialmente centrado principalmente en Linux y ELF. El archivo README del proyecto indica que es compatible. x86-64, ARM64, RISC-V riscv64gc y apoyo inicial LoongArch64 en Linux; puede crear binarios estáticos, static-PIE, ejecutables enlazados dinámicamente y archivos .so, funciona con información de depuración, servidor de trabajos GNU y algunos scripts de enlazador. Enlace incremental, scripts de enlazador más complejos, Mach-O y Windows Actualmente se clasifican como oportunidades no realizadas o inconclusas.

En términos prácticos, Wild 0.9 amplía la compatibilidad con el ecosistema de compilación existente, comienza a ir más allá de ELF y añade soporte para escenarios que dificultan el uso del enlazador en proyectos grandes de C/C++ y proyectos mixtos. Para los desarrolladores de Rust, Wild sigue siendo interesante como base potencial para el enlace incremental futuro, y para los desarrolladores de sistemas, como otro competidor rápido de GNU ld, LLD y Mold.

Fuente: linux.org.ru

Compre alojamiento confiable para sitios con protección DDoS, servidores VPS VDS 🔥 Compra alojamiento web fiable con protección DDoS, servidores VPS VDS | ProHoster