1 puntos por GN⁺ 2025-01-25 | 1 comentarios | Compartir por WhatsApp
  • 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 wild a 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.
  • 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.
  • 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.
  • Contribuir

    • Para información sobre cómo contribuir a Wild, consulta CONTRIBUTING.md.
  • 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

 
GN⁺ 2025-01-25
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.toml

  • Serí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