1 pontos por GN⁺ 2024-08-24 | 1 comentários | Compartilhar no WhatsApp
  • Um usuário do LWN organizou em um índice os 20 ensaios sobre linkers de Ian Lance Taylor, antes espalhados, para que possam ser acompanhados de uma vez só
  • O texto original é de Ian Lance Taylor, autor do linker gold, e reúne novamente os textos numerados com base nos títulos das seções para facilitar a consulta
  • A parte inicial cobre o conceito de linker, histórico pessoal, linkagem dinâmica, formatos de arquivo objeto, bibliotecas compartilhadas, símbolos ELF, relocações e otimização de TLS
  • A parte final segue com resolução de símbolos, comparação entre linkagem estática/dinâmica, otimização em tempo de link, COMDAT, instanciação de templates em C++, quadros de exceção e linkagem incremental
  • O índice e os comentários foram publicados em domínio público, sem restrições para cópia, uso ou trabalhos derivados

Índice que reúne os 20 ensaios sobre linkers para facilitar a busca

  • Os 20 textos de Ian Lance Taylor sobre linkers foram organizados em um índice contínuo e fácil de ler
  • Era difícil encontrar um índice bem encadeado no blog de Ian ou no LWN, então foi criado um índice separado
  • As URLs dos textos seguem numeração sequencial, mas um índice que mostre o tema de cada texto de relance é útil
  • Como cada texto é referido apenas por número, os títulos foram montados principalmente a partir dos títulos de seção de Ian

Lista de textos incluídos

Condições de publicação

  • Este índice e os comentários foram publicados em domínio público
  • Não há restrições para uso, cópia, execução pública ou criação de trabalhos derivados, e não é necessária autorização adicional

1 comentários

 
GN⁺ 2024-08-24
Opiniões no Hacker News
  • Alguém linkou uma versão que reúne tudo em um único e-book usando uma receita do Calibre, então deixo aqui o resultado para quem precisar
    https://www.mediafire.com/folder/b8fdqx7eqcpdl/linker
    ou
    https://0x0.st/Xycy.azw3
    https://0x0.st/Xyct.epub
    https://0x0.st/Xycv.mobi
    https://0x0.st/Xycw.pdf

  • O desenvolvedor que trabalhou nos linkers lld e mold levou o desempenho ao limite
    LLD (parte do LLVM):
    https://llvm.org/devmtg/2017-10/slides/Ueyama-lld.pdf
    Linker MOLD:
    https://github.com/rui314/mold/blob/main/docs/design.md
    A Apple também revelou um novo linker em um nível parecido com o do mold; a discussão anterior está aqui: https://news.ycombinator.com/item?id=36218330

    • Sempre que vejo isso, fico inspirado pela ideia de que a busca por desempenho quase nunca termina
      O LLD foi projetado para ser rápido, e o Gold antes dele também, mas o Mold ultrapassou ambos por uma boa margem
  • Embora seja um texto de [2008], estes artigos são realmente materiais valiosos, então é sempre bom vê-los voltar à primeira página do HN

    • Quando ouvi dizer que alguém tinha corrigido um bug de linker, pensei “quão difícil isso pode ser?”, mas mudei de ideia depois de ler este texto
      É uma explicação realmente excelente
  • Esta série de artigos é uma das minhas favoritas e, pessoalmente, me abriu os olhos para muitas coisas
    Não acho que exista, na internet ou em qualquer outro lugar, um material que reúna todas essas informações em um só lugar. Seria ótimo se o Ian tivesse publicado isso como livro

    • O livro Linkers and Loaders, de John R. Levine, também é bem bom
    • Imprimi todos os 20 capítulos em PDF e agora os tenho como se fossem um livro pessoal
      Ainda assim, gostaria que o Ian disponibilizasse uma versão em que todos os capítulos pudessem ser vistos em uma única página
  • https://www.airs.com/blog/archives/51
    É sobre fazer pattern matching em código assembly e reorganizar ou reutilizar sequências

  • Coleção de comentários anteriores: https://news.ycombinator.com/item?id=27445981

  • Entendo por que os linkers surgiram em uma época em que a memória era limitada
    Mas fico me perguntando se linkers ainda são necessários em ambientes com memória abundante, como os sistemas modernos. Além disso, bibliotecas compartilhadas não acabam virando um vetor de ataque à cadeia de suprimentos, como no ataque ao xz que foi bloqueado no começo deste ano?

    • Sei que está na moda usar coisas como flatpak ou Docker, mas ainda assim não quero 30 instâncias de Gtk rodando para cada aplicativo GUI que executo
      Ambientes como Raspberry Pi ainda precisam ser levados em conta. É difícil dizer que bibliotecas compartilhadas sejam um vetor de ataque mais perigoso do que o próprio aplicativo. Mesmo que você baixe um binário estático, não dá para saber o que há dentro dele; e eu também não sei por que confiamos em metade das imagens Docker que todo mundo baixa e usa, mas, de todo modo, é assim que elas são usadas
    • Ou o compilador precisa enxergar o programa inteiro de uma vez, ou é preciso haver uma forma de combinar os resultados de várias etapas de compilação
      A menos que todos os arquivos-fonte sejam processados ao mesmo tempo e com exatamente as mesmas opções de build, é necessário combinar os resultados. Mesmo com LTO moderno, o compilador geralmente não vê todos os arquivos do programa no nível do código-fonte, e as bibliotecas C e C++ normalmente são separadas. Enquanto várias linguagens não transformarem o programa inteiro em uma única etapa de compilação e assembly, será preciso algo para combinar os resultados, e isso é o linker. Mesmo que tudo seja construído estaticamente, a necessidade de um linker em tempo de execução não desaparece, a menos que se codifique diretamente o endereço exato em que o programa será executado; e esse tipo de abordagem entra em conflito com técnicas de segurança como ASLR
    • Linkagem estática ainda é linkagem, e é preciso um linker para combinar vários arquivos-objeto em um único executável
      Acho que a mentalidade de que memória e CPU são abundantes é uma das razões pelas quais a experiência do usuário não melhorou de forma perceptível, apesar de o hardware ter ficado várias ordens de grandeza mais rápido
    • A súbita abundância de memória nos sistemas modernos já foi totalmente consumida por sandboxes, empacotadores, bibliotecas e frameworks
    • Se você quer que um build em que só uma linha de código mudou termine em menos de 30 minutos, precisa de algo parecido com um linker para lidar com unidades de código compilado menores que o programa inteiro