Wild, una herramienta de enlace rápida para Linux
(github.com/davidlattimore)-
Enlace con Wild
- Wild es una herramienta cuyo objetivo es ofrecer enlazado muy rápido para el desarrollo iterativo.
- Aún no se ha implementado el enlazado incremental, pero incluso ahora muestra un rendimiento bastante rápido.
- Para builds de producción, se recomienda usar enlazadores maduros como GNU ld o LLD.
- Si quieres tiempos de build rápidos durante el desarrollo, puedes probar Wild.
- Puede usarse si estás desarrollando en x86-64 Linux, y se recomienda reportar bugs si aparece algún problema.
-
Instalación
- Para instalar binarios precompilados, puedes copiar y usar el comando desde la página de releases.
- También puedes copiar manualmente el binario
wilda tu ruta. - Para compilar e instalar directamente, usa el comando
cargo install --locked --bin wild --git https://github.com/davidlattimore/wild.git wild.
-
Usarlo como enlazador predeterminado
- Para usar Wild como enlazador predeterminado al compilar código Rust, agrega la configuración en
~/.cargo/config.toml.
- Para usar Wild como enlazador predeterminado al compilar código Rust, agrega la configuración en
-
Preguntas y respuestas
- ¿Por qué otro enlazador?
- Mold ya es muy rápido, pero no soporta enlazado incremental. Wild apunta a ofrecer enlazado incremental.
- Está escrito en Rust, por lo que se espera que pueda resolver la complejidad del enlazado incremental.
- Funciones que sí funcionan
- Plataforma/arquitectura compatible actualmente: x86-64 en Linux
- Puede generar binarios enlazados estáticamente, binarios enlazados dinámicamente y objetos compartidos (archivos
.so) - Compatibilidad confirmada con proc-macros de Rust
- Pasó pruebas con crates populares de crates.io
- Soporta información de depuración
- Funciones que aún no son compatibles
- Enlazado incremental, soporte para arquitecturas distintas de x86-64, soporte para varias flags de enlazado, compatibilidad con Mac y Windows, etc.
- ¿Por qué otro enlazador?
-
Benchmarks
- El objetivo de Wild es ofrecer un rendimiento muy rápido mediante enlazado incremental.
- También apunta a ser lo más rápido posible incluso sin enlazado incremental.
- Según los resultados de benchmarks, sin información de depuración Wild muestra un rendimiento muy rápido.
- Cuando se incluye información de depuración, el rendimiento baja un poco.
-
Enlazado de código Rust
- Puedes compilar y probar crates con Wild usando el comando
cargo test. - Debe estar instalado el compilador Clang, ya que GCC no permite usar un enlazador arbitrario.
- Puedes compilar y probar crates con Wild usando el comando
-
Contribuir
- Para información sobre cómo contribuir a Wild, consulta
CONTRIBUTING.md.
- Para información sobre cómo contribuir a Wild, consulta
-
Patrocinio
- Si patrocinas este proyecto, se podrá trabajar en él a tiempo completo durante más tiempo.
-
Licencia
- Puedes elegir entre la Apache License, Version 2.0 o la licencia MIT.
1 comentarios
Comentarios en Hacker News
Aunque mold cambió su licencia de AGPL a MIT y eso redujo la necesidad de un nuevo linker rápido, sorprende que este proyecto haya aparecido. Vale la pena prestarle atención porque en algunos casos es 2 veces más rápido que mold
Revisé este proyecto antes, pero todavía no parece estar listo para producción. Por eso sigo usando mold
Para los usuarios de macOS, Apple lanzó un nuevo linker hace 1 o 2 años, y si se usa con Rust hay que agregar una configuración específica en
config.tomlSería interesante que un compilador de C/C++ construyera todo el programa como una sola unidad sin una etapa de enlace. La mayoría de las bibliotecas externas se enlazan dinámicamente, así que eliminar el proceso de enlace no debería causar problemas
El interés por los linkers rápidos ha seguido creciendo de forma constante: Gold en 2008, Lld en 2015 y mold en 2021
La popularidad de Rust está aumentando el interés por los linkers rápidos, y los binarios de Rust consumen mucho tiempo en la etapa de enlace. No es un problema exclusivo de Rust, sino del enlace estático y de las optimizaciones de LLVM
"Linkers and Loaders" de John Levine es un buen libro sobre el tema, y cuando lo leí hace unos años me pareció muy interesante
Al comparar el rendimiento de wild, mold y ld, se puede ver que en proyectos bien estructurados el tiempo de enlace no es un problema tan grande
Los benchmarks de rendimiento se ejecutaron en una laptop System76 Lemur Pro modelo 2020, con 4 núcleos (8 hilos) y 42 GB de RAM
También hay quienes se preguntan qué es exactamente un linker
Hubo una pregunta sobre si puede enlazar el kernel de Linux, y ese fue un hito útil para LLD