1 ポイント 投稿者 GN⁺ 2024-08-24 | 1件のコメント | WhatsAppで共有
  • 散在していた Ian Lance Taylor の 20回連載リンカエッセイをまとめて追えるよう、LWN のユーザーが目次として整理
  • 原文は gold リンカの作者である Ian Lance Taylor の文章で、番号中心だった記事群をセクション見出しベースで再構成し、探しやすくまとめている
  • 前半ではリンカの概念、個人の経歴、動的リンク、オブジェクトファイル形式、共有ライブラリ、ELF シンボル、再配置、TLS 最適化までを扱う
  • 後半ではシンボル解決、静的/動的リンクの比較、リンク時最適化、COMDAT、C++ テンプレートのインスタンス化、例外フレーム、インクリメンタルリンクへと続く
  • 目次とコメントは public domain として公開されており、複製・利用・派生作業に制限はない

20回連載リンカエッセイを探しやすくまとめた目次

  • Ian Lance Taylor による 20回連載のリンカ記事を、続けて読みやすい目次として整理
  • Ian のブログや LWN では、うまくまとまった目次を見つけにくかったため、別途目次を作成
  • 記事 URL は連番になっているが、各記事のテーマをひと目で把握するには、この目次が便利
  • 各記事は番号だけで呼ばれているため、見出しは主に Ian の セクション見出しから取って構成

含まれている記事一覧

公開条件

  • この目次とコメントは public domain として公開されている
  • 利用、複製、上演、派生作業の作成に制限はなく、追加の許可も不要

1件のコメント

 
GN⁺ 2024-08-24
Hacker News のコメント
  • 誰かが Calibre レシピで全体を1冊の電子書籍にまとめたものをリンクしていたので、必要な人向けに成果物を置いておく
    https://www.mediafire.com/folder/b8fdqx7eqcpdl/linker
    または
    https://0x0.st/Xycy.azw3
    https://0x0.st/Xyct.epub
    https://0x0.st/Xycv.mobi
    https://0x0.st/Xycw.pdf

  • lldmold リンカに取り組んだ開発者が、性能を限界まで押し上げた
    LLD(LLVM の一部):
    https://llvm.org/devmtg/2017-10/slides/Ueyama-lld.pdf
    MOLD リンカ:
    https://github.com/rui314/mold/blob/main/docs/design.md
    Apple も mold と同等レベルの新しいリンカを公開しており、以前の議論はこちら: https://news.ycombinator.com/item?id=36218330

    • これを見るたびに、性能追求はなかなか終わらないのだと刺激を受ける
      LLD は高速化を目的に設計され、その前の Gold もそうだったが、Mold はその両方を大きく上回った
  • [2008] の記事だが、これらの記事は本当に金のような資料なので、HN のトップページにまた上がってくるのはいつも嬉しい

    • リンカのバグを直した人がいると聞いて「どれほど難しいのか」と思っていたが、この記事を読んで考えが変わった
      本当に素晴らしい解説
  • この連載は最も好きな記事の一つで、個人的に目を開かされる内容が多かった
    インターネット上であれ他の場所であれ、これらすべての情報を一か所にまとめた資料はないと思う。Ian が本にしてくれていたら本当に良かった

    • John R. Levine の Linkers and Loaders という本もかなり良い
    • 20章すべてを PDF で印刷して、今では個人用の本のように持っている
      ただ、Ian が全章を1ページで見られる版を提供してくれたら、という思いはある
  • https://www.airs.com/blog/archives/51
    アセンブリコードでパターンマッチングを行い、シーケンスを再配置したり再利用したりする内容

  • 以前のコメント集: https://news.ycombinator.com/item?id=27445981

  • メモリが限られていた時代にリンカがなぜ生まれたのかは理解できる
    ただ、現代のシステムのようにメモリが豊富な環境でも、リンカがまだ必要なのか気になる。さらに共有ライブラリは、今年初めに阻止された xz 攻撃のようにサプライチェーン攻撃の経路になるのではないかとも思う

    • flatpak や Docker のようなものを使うのが流行しているのは分かるが、それでも実行する GUI アプリごとに Gtk のインスタンスが30個ずつ立ち上がるのは望ましくない
      Raspberry Pi のような環境も依然として考慮すべきだ。共有ライブラリがアプリ自体より危険な攻撃経路だとは考えにくい。静的バイナリをダウンロードしても、その中に何が入っているかは分からないし、皆がダウンロードして使っている Docker イメージの半分をなぜ信用しているのかも分からないが、とにかくそうやって使っている
    • コンパイラがプログラム全体を一度に見る必要があるか、そうでなければ複数のコンパイル段階の成果物を結合する方法が必要になる
      すべてのソースファイルを同時に、まったく同じビルドオプションで処理しない限り、成果物を結合しなければならない。現代的な LTO があっても、コンパイラが通常、プログラムの全ファイルをソースコードレベルで見ることはできず、C ライブラリと C++ ライブラリはたいてい別物だ。複数の言語がプログラム全体を単一のコンパイル・アセンブル段階で作らない限り、成果物を結合する何かが必要で、それがリンカだ。すべてを静的にビルドしても、プログラムが実行される正確なアドレスをハードコードしない限り、ランタイムリンカの必要性は消えないし、その方式は ASLR のようなセキュリティ手法と衝突する
    • 静的リンクも依然としてリンクであり、複数のオブジェクトファイルを1つの実行ファイルにまとめるにはリンカが必要だ
      メモリと CPU が豊富だという考え方は、ハードウェアが何桁も速くなったにもかかわらず、ユーザー体験が目に見えて良くならない理由の一つだと思う
    • 現代システムに突然訪れたメモリの豊かさは、サンドボックス、パッケージャ、ライブラリ、フレームワークが十分に追いついて、すっかり使い切ってしまった
    • 1行だけ変更したビルドが30分以内に終わってほしいなら、プログラム全体より小さな単位のコンパイル済みコードを処理する、リンカのような何かが必要だ