Wild, uma ferramenta de linkedição rápida para Linux
(github.com/davidlattimore)-
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
wildpara 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.
- Para usar o Wild como linker padrão ao compilar código Rust, adicione a configuração em
-
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.
- Por que mais um linker?
-
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.
- Você pode compilar e testar crates com o Wild usando o comando
-
Contribuição
- Para saber como contribuir com o Wild, consulte o
CONTRIBUTING.md.
- Para saber como contribuir com o Wild, consulte o
-
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
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.tomlSeria 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