Mold 1.1 já foi lançado, conheça as novidades deste Linker moderno superior ao GNU gold e LLVM

Vários dias atrás foi anunciado o lançamento da nova versão do moderno Linker Mold 1.1, que pode ser usado como um substituto transparente mais rápido para o vinculador GNU em sistemas Linux.

Nesta nova versão do molde 1.1 está uma versão que contém novos recursos, correções de bugs e melhorias de desempenho.

Sobre o Molde

Molde suporta todos os recursos do vinculador GNU e tem um desempenho muito alto, já que os links que faz são apenas duas vezes mais rápidos do que simplesmente copiar arquivos com o utilitário cp.

Desta forma, o reduzir o tempo de compilação melhora significativamente a conveniência de desenvolver grandes projetos reduzindo o tempo de espera no processo de geração do arquivo executável ao depurar e testar alterações.

A motivação para criar o Mold foi o aborrecimento de ter que esperar o link ser concluído após cada mudança de código, bem como a baixa eficiência dos linkers existentes em sistemas multicore e o desejo de testar uma arquitetura de link fundamentalmente diferente sem recorrer a modelos desnecessariamente complicados, como o link incremental.

O alto desempenho de vincular um arquivo executável de um grande número de arquivos de objetos preparados pelo compilador no Mold é obtido por meio do uso de algoritmos mais rápidos, a paralelização ativa de operações entre os núcleos de CPU disponíveis e o uso de estruturas de dados mais eficientes.

Por exemplo Mold implementa uma técnica para realizar cálculos intensivos simultaneamente com cópia de arquivos, carregamento proativo de arquivos de objetos na memória, uso de tabelas de hash rápidas ao resolver caracteres, varredura de tabelas de realocação em um fluxo separado e seções de desduplicação que se repetem em arquivos diferentes.

Principais novidades do Molde 1.1

Nesta nova versão do Mold 1.1 que se apresenta, destaca-se que o suporte para otimização de estágio de link (LTO, Otimização de Tempo de Link).

As otimizações de LTO diferem levando em consideração o estado de todos os arquivos envolvidos no processo de compilação, enquanto os modos de otimização tradicionais otimizam cada arquivo individualmente e não levam em consideração as condições para chamar funções definidas em outros arquivos.

Anteriormente, quando os arquivos de código intermediário (IR) GCC ou LLVM eram encontrados, os vinculadores ld.bfd ou ld.lld apropriados eram invocados, mas agora o Mold lida com arquivos IR por conta própria e usa a API do plugin Linker, também usada no GNU ld e Ligadores de ouro GNU. A velocidade quando o LTO está ativado é apenas marginalmente mais rápido do que outros vinculadores, pois a maior parte do tempo é gasto otimizando o código, não vinculando.

Destaca-se também que opções adicionadas “–print-dependencies” e “–print-dependencies=full” pPara gerar informações em formato CSV sobre as dependências entre arquivos de entrada, que podem, por exemplo, ser usados ​​para analisar motivos de conexão ao vincular determinados arquivos de objeto ou ao trabalhar para minimizar dependências entre arquivos.

Outra mudança que se destaca da nova versão é que o suporte para arquitetura RISC-V (RV64) nas plataformas host e de destino.

Além disso, também podemos descobrir que adicionada a opção “–emit-relocs” para habilitar a cópia de seções de realocação de endereço dos arquivos de entrada aos arquivos finais para outras otimizações a serem aplicadas no estágio pós-link.

Das outras mudanças que se destacam:

  • Adicionada opção “–shuffle-sections” para randomizar a ordem das seções antes de fixar seus endereços no espaço de endereço virtual.
  • Adicionadas as opções “–warn-once” e “–warn-textrel”.
  • Dependência removida em libxxhash.

Finalmente se você estiver interessado em saber mais sobre isso, você pode verificar os detalhes no link a seguir

Como instalar o molde?

Para aqueles que estão interessados ​​em poder trabalhar com o Mold, podem obter o utilitário baixando e compilando o código fonte. Para fazer isso, basta abrir um terminal e digitar o seguinte:

git clone https://github.com/rui314/mold.git
cd mold
git checkout v1.1.1
make -j$(nproc) CXX=clang++
sudo make install

Para conhecer a utilização do Mold, pode consultar a documentação neste link


Seja o primeiro a comentar

Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.