O linker Mold 3.0 foi lançado e pode ser usado como uma alternativa mais rápida e transparente ao linker GNU. Linux-systems. O projeto está sendo desenvolvido por Rui Ueyama, autor do linker LLVM lld. A principal característica do Mold é sua altíssima velocidade de vinculação, superando significativamente os linkers GNU gold e LLVM lld (vincular com o Mold é apenas metade da velocidade de simplesmente copiar arquivos com o utilitário cp). O código é escrito em Rust e distribuído sob a licença MIT.
Reduzir o tempo de vinculação melhora significativamente a usabilidade de grandes projetos, diminuindo o tempo de espera durante a geração de arquivos executáveis, o que reduz a necessidade de depuração e teste de alterações. A motivação para a criação do Mold surgiu da frustração de ter que esperar a conclusão da vinculação após cada alteração de código, do baixo desempenho dos vinculadores existentes em sistemas multi-core e do desejo de experimentar uma arquitetura de vinculação fundamentalmente diferente, sem recorrer a modelos excessivamente complexos, como a vinculação incremental.
O Mold alcança alto desempenho na compilação de arquivos executáveis a partir de um grande número de arquivos objeto preparados pelo compilador, utilizando algoritmos mais rápidos, paralelizando ativamente as operações entre os núcleos de CPU disponíveis e empregando estruturas de dados mais eficientes. Por exemplo, o Mold implementa uma técnica para realizar cálculos intensivos simultaneamente à cópia de arquivos, carregando arquivos objeto na memória de forma preventiva, utilizando tabelas hash rápidas para resolução de símbolos, examinando tabelas de realocação em uma thread separada e removendo seções mescladas duplicadas em diferentes arquivos.
A versão 3.0 do Mold destaca-se pela reescrita do código-fonte de C++ (C++20) para Rust. O Mold 3.0 pode ser usado como um substituto transparente para o Mold 2.42.1, a última versão em C++, e suporta todas as opções e arquiteturas de destino anteriormente disponíveis. A transição para Rust possibilitou proteger o projeto de potenciais problemas no tratamento de arquivos objeto corrompidos — em situações onde a versão em C++ falhava devido a acesso fora dos limites, a implementação em Rust para na etapa de verificação de limites. O desempenho da implementação em Rust é equivalente ao da versão em C++.
Além da migração para Rust, um objetivo fundamental no desenvolvimento da versão 3.0 foi melhorar a compatibilidade com o GNU ld e preparar o projeto para uso como o linker padrão nas distribuições. LinuxO sistema de compilação foi substituído pelo Cargo, e o sistema de testes foi substituído pelo cargo test, que substituiu o ctest. A biblioteca oneTBB foi removida das dependências.
Fonte: opennet.ru
