1 pontos por GN⁺ 2025-01-25 | 1 comentários | Compartilhar no WhatsApp
  • Linkedição com Wild

    • Wild é uma ferramenta cujo objetivo é oferecer linkedição muito rápida para desenvolvimento iterativo.
    • A linkedição incremental ainda não foi implementada, mas o desempenho já é bastante rápido no estado atual.
    • Para builds de produção, é recomendado usar linkers maduros como GNU ld ou LLD.
    • Se você quer tempos de build rápidos durante o desenvolvimento, vale a pena experimentar o Wild.
    • Pode ser usado por quem desenvolve em Linux x86-64, e é recomendável enviar um bug report caso encontre problemas.
  • Instalação

    • Para instalar um binário pré-compilado, você pode copiar e usar o comando na página de releases.
    • Também é possível copiar manualmente o binário wild para o seu PATH.
    • Para compilar e instalar diretamente, use o comando cargo install --locked --bin wild --git https://github.com/davidlattimore/wild.git wild.
  • Usando como linker padrão

    • Para usar o Wild como linker padrão ao compilar código Rust, adicione a configuração em ~/.cargo/config.toml.
  • Perguntas e respostas

    • Por que mais um linker?
      • O Mold já é muito rápido, mas não oferece suporte a linkedição incremental. O Wild tem a linkedição incremental como objetivo.
      • Como foi escrito em Rust, espera-se que ele consiga lidar com a complexidade da linkedição incremental.
    • O que já funciona
      • Plataforma/arquitetura atualmente suportada: Linux x86-64
      • Pode gerar binários com linkedição estática, binários com linkedição dinâmica e objetos compartilhados (arquivos .so)
      • Compatibilidade confirmada com proc-macros de Rust
      • Passou em testes com crates populares do crates.io
      • Suporte a informações de depuração
    • O que ainda não é suportado
      • Linkedição incremental, suporte a arquiteturas além de x86-64, suporte a vários flags de linkedição, suporte a Mac e Windows etc.
  • Benchmarks

    • O objetivo do Wild é oferecer desempenho muito rápido por meio de linkedição incremental.
    • Mesmo sem linkedição incremental, ele busca ser o mais rápido possível.
    • Nos benchmarks, sem informações de depuração, o Wild mostra desempenho muito rápido.
    • Quando as informações de depuração estão incluídas, o desempenho cai um pouco.
  • Linkedição de código Rust

    • Você pode compilar e testar crates com o Wild usando o comando cargo test.
    • É necessário ter o compilador Clang instalado, já que o GCC não permite o uso de um linker arbitrário.
  • Contribuição

    • Para saber como contribuir com o Wild, consulte o CONTRIBUTING.md.
  • Patrocínio

    • Patrocinar este projeto permite trabalhar nele em tempo integral por mais tempo.
  • Licença

    • É possível escolher entre a Apache License, Version 2.0 e a licença MIT.

1 comentários

 
GN⁺ 2025-01-25
Comentários no Hacker News
  • É surpreendente ver este projeto surgir, apesar de a necessidade de um novo linker rápido ter diminuído depois que o mold mudou sua licença de AGPL para MIT. Ainda assim, chama atenção por ser até 2 vezes mais rápido que o mold em alguns casos

  • Já dei uma olhada neste projeto antes, mas ainda não parece pronto para produção. Por isso, continuo usando o mold

  • Para usuários de macOS, a Apple lançou um novo linker há 1 ou 2 anos, e, ao usá-lo com Rust, é preciso adicionar uma configuração específica ao config.toml

  • Seria interessante se compiladores C/C++ construíssem o programa inteiro como uma única unidade, sem etapa de linkedição. Como a maioria das bibliotecas externas é vinculada dinamicamente, remover o processo de linkedição não causaria problemas

  • O interesse por linkers rápidos continua crescendo: Gold em 2008, Lld em 2015 e mold em 2021

  • O interesse por linkers rápidos está aumentando por causa da popularidade do Rust, já que binários Rust consomem muito tempo na etapa de linkedição. Isso não é um problema exclusivo do Rust, mas sim da vinculação estática e das otimizações do LLVM

  • "Linkers and Loaders", de John Levine, é um bom livro sobre o tema e foi uma leitura muito interessante quando o li alguns anos atrás

  • Comparando o desempenho de wild, mold e ld, dá para ver que, em projetos bem estruturados, o tempo de linkedição não chega a ser um grande problema

  • Os benchmarks de desempenho foram executados em um notebook System76 Lemur Pro modelo 2020, com 4 núcleos (8 threads) e 42 GB de RAM

  • Também houve quem perguntasse o que é um linker

  • Houve uma pergunta sobre ser possível linkar o kernel Linux, e isso foi um marco útil para o LLD