1 puntos por GN⁺ 2024-08-24 | 1 comentarios | Compartir por WhatsApp
  • Un usuario de LWN organizó como índice los 20 ensayos sobre linkers de Ian Lance Taylor, que estaban dispersos, para poder seguirlos de una sola vez
  • El texto original es de Ian Lance Taylor, autor del linker gold, y reagrupa entradas numeradas para que sea más fácil volver a encontrarlas según el título de cada sección
  • La primera mitad cubre el concepto de linker, la trayectoria personal del autor, enlace dinámico, formatos de archivos objeto, bibliotecas compartidas, símbolos ELF, relocalización y optimización de TLS
  • La segunda mitad continúa con resolución de símbolos, comparación entre enlace estático y dinámico, optimización en tiempo de enlace, COMDAT, instanciación de plantillas de C++, frames de excepción y enlace incremental
  • El índice y los comentarios están publicados como public domain, sin restricciones para copiar, usar o crear trabajos derivados

Índice que agrupa los 20 ensayos sobre linkers para encontrarlos con facilidad

  • Se organizan los 20 textos de Ian Lance Taylor sobre linkers en un índice continuo y fácil de leer
  • Era difícil encontrar un índice bien conectado en el blog de Ian o en LWN, así que se creó uno por separado
  • Las URL de los textos usan números consecutivos, pero un índice resulta útil para ver de un vistazo el tema de cada entrada
  • Como cada texto se identifica solo por número, los títulos se arman principalmente a partir de los encabezados de sección de Ian

Lista de textos incluidos

Condiciones de publicación

  • Este índice y los comentarios están publicados como public domain
  • No hay restricciones para usarlo, copiarlo, ejecutarlo públicamente ni crear trabajos derivados, y no se requiere permiso adicional

1 comentarios

 
GN⁺ 2024-08-24
Comentarios de Hacker News
  • Alguien compartió un enlace a una compilación completa en un solo libro electrónico usando una receta de Calibre, así que dejó el resultado para quien lo necesite
    https://www.mediafire.com/folder/b8fdqx7eqcpdl/linker
    o
    https://0x0.st/Xycy.azw3
    https://0x0.st/Xyct.epub
    https://0x0.st/Xycv.mobi
    https://0x0.st/Xycw.pdf

  • El desarrollador que trabajó en los enlazadores lld y mold llevó el rendimiento al extremo
    LLD (parte de LLVM):
    https://llvm.org/devmtg/2017-10/slides/Ueyama-lld.pdf
    Enlazador MOLD:
    https://github.com/rui314/mold/blob/main/docs/design.md
    Apple también presentó un enlazador nuevo de un nivel parecido a mold; la discusión anterior está aquí: https://news.ycombinator.com/item?id=36218330

    • Cada vez que veo esto me inspira pensar que la búsqueda del rendimiento casi nunca termina
      LLD fue diseñado para ser rápido, y Gold antes de él también, pero Mold superó ampliamente a ambos
  • Aunque es un texto de [2008], estos artículos son realmente material de oro, así que siempre da gusto verlos volver a la portada de HN

    • Escuché que alguien había corregido un bug del enlazador y pensé “qué tan difícil puede ser”, pero después de leer esto cambié de opinión
      Es una explicación excelente
  • Esta serie de artículos es de mis favoritas y, en lo personal, me abrió mucho los ojos
    No creo que exista, ni en internet ni en otro lado, un recurso que reúna toda esta información en un solo lugar. Ojalá Ian lo hubiera publicado como libro

    • El libro Linkers and Loaders de John R. Levine también es bastante bueno
    • Imprimí los 20 capítulos en PDF y ahora los tengo casi como si fueran un libro personal
      Aun así, me gustaría que Ian ofreciera una versión donde se pudieran ver todos los capítulos en una sola página
  • https://www.airs.com/blog/archives/51
    Trata sobre pattern matching en código ensamblador, y sobre reorganizar o reutilizar secuencias

  • Recopilación de comentarios anteriores: https://news.ycombinator.com/item?id=27445981

  • Entiendo por qué surgieron los enlazadores en la época en que la memoria era limitada
    Pero me pregunto si siguen siendo necesarios incluso en entornos modernos donde la memoria abunda. Además, las bibliotecas compartidas parecen poder convertirse en una ruta de ataque a la cadena de suministro, como pasó con el ataque de xz bloqueado a inicios de este año

    • Sé que está de moda usar cosas como flatpak o Docker, pero aun así no quiero que cada aplicación GUI que ejecuto levante 30 instancias de Gtk
      También hay que seguir pensando en entornos como Raspberry Pi. No diría que las bibliotecas compartidas sean una vía de ataque más peligrosa que la aplicación misma. Aunque descargues un binario estático, no sabes qué trae dentro, y tampoco entiendo por qué la gente confía en la mitad de las imágenes de Docker que descarga, pero aun así así las usan
    • O el compilador tiene que ver el programa completo de una sola vez, o hace falta alguna forma de combinar los resultados de varias etapas de compilación
      A menos que proceses todos los archivos fuente al mismo tiempo y con exactamente las mismas opciones de compilación, necesitas combinar los resultados. Incluso con LTO moderno, el compilador normalmente no puede ver todos los archivos del programa a nivel de código fuente, y las bibliotecas de C y C++ suelen estar separadas. A menos que múltiples lenguajes conviertan todo el programa en una sola etapa de compilación y ensamblado, necesitas algo que combine los resultados, y eso es el enlazador. Incluso si compilas todo de forma estática, mientras no codifiques de forma rígida la dirección exacta en la que se ejecutará el programa, la necesidad de un enlazador en tiempo de ejecución no desaparece, y ese enfoque además choca con técnicas de seguridad como ASLR
    • El enlace estático sigue siendo enlace, y hace falta un enlazador para combinar varios archivos objeto en un solo ejecutable
      Esa forma de pensar de que sobran memoria y CPU me parece una de las razones por las que la experiencia de usuario no ha mejorado de forma visible, aunque el hardware sea varios órdenes de magnitud más rápido
    • La repentina abundancia de memoria en los sistemas modernos ya fue absorbida por sandboxes, empaquetadores, bibliotecas y frameworks
    • Si quieres que una compilación donde solo cambiaste una línea termine en menos de 30 minutos, necesitas algo parecido a un enlazador para manejar código compilado en unidades más pequeñas que el programa completo