1 poin oleh GN⁺ 2024-08-24 | 1 komentar | Bagikan ke WhatsApp
  • Pengguna LWN menyusun daftar isi untuk esai linker 20 bagian karya Ian Lance Taylor yang sebelumnya tersebar, agar bisa diikuti sekaligus
  • Teks aslinya adalah tulisan Ian Lance Taylor, penulis linker gold, dan kumpulan tulisan yang semula berfokus pada nomor ini disusun ulang berdasarkan judul bagian agar lebih mudah dicari
  • Bagian awal membahas konsep linker, riwayat pribadi, dynamic linking, format object file, shared library, simbol ELF, relokasi, hingga optimasi TLS
  • Bagian akhir berlanjut ke resolusi simbol, perbandingan static/dynamic linking, link time optimization, COMDAT, instansiasi templat C++, exception frame, hingga incremental linking
  • Daftar isi dan komentar ini dirilis sebagai public domain, sehingga tidak ada pembatasan untuk menyalin, menggunakan, atau membuat karya turunan

Daftar isi yang mengelompokkan esai linker 20 bagian agar mudah dicari

  • Menyusun tulisan linker 20 bagian karya Ian Lance Taylor menjadi daftar isi yang mudah dibaca secara berurutan
  • Sulit menemukan daftar isi yang tertata rapi di blog Ian maupun di LWN, sehingga dibuatlah daftar isi terpisah
  • URL setiap tulisan memang bernomor berurutan, tetapi daftar isi berguna untuk melihat topik masing-masing tulisan secara sekilas
  • Setiap tulisan hanya dirujuk dengan nomor, sehingga judulnya terutama diambil dari judul bagian milik Ian

Daftar tulisan yang disertakan

Ketentuan publikasi

  • Daftar isi dan komentar ini dirilis sebagai public domain
  • Tidak ada pembatasan untuk penggunaan, penyalinan, pertunjukan, maupun pembuatan karya turunan, dan tidak memerlukan izin tambahan

1 komentar

 
GN⁺ 2024-08-24
Pendapat di Hacker News
  • Seseorang menautkan versi yang menggabungkan semuanya menjadi satu ebook dengan resep Calibre, jadi saya unggah hasilnya untuk yang membutuhkan
    https://www.mediafire.com/folder/b8fdqx7eqcpdl/linker
    atau
    https://0x0.st/Xycy.azw3
    https://0x0.st/Xyct.epub
    https://0x0.st/Xycv.mobi
    https://0x0.st/Xycw.pdf

  • Developer yang mengerjakan linker lld dan mold benar-benar mendorong performa sampai batasnya
    LLD (bagian dari LLVM):
    https://llvm.org/devmtg/2017-10/slides/Ueyama-lld.pdf
    Linker MOLD:
    https://github.com/rui314/mold/blob/main/docs/design.md
    Apple juga merilis linker baru dengan level yang mirip mold; diskusi sebelumnya ada di sini: https://news.ycombinator.com/item?id=36218330

    • Setiap kali melihat ini, saya terinspirasi bahwa pencarian performa nyaris tidak pernah berakhir
      LLD dirancang agar cepat, begitu juga Gold sebelumnya, tetapi Mold melampaui keduanya dengan selisih besar
  • Meski ini tulisan [2008], tulisan-tulisan ini benar-benar materi yang sangat berharga, jadi selalu menyenangkan melihatnya kembali naik ke halaman depan HN

    • Saya pernah mendengar ada orang yang memperbaiki bug linker dan berpikir, “Memangnya sesulit apa?”, lalu setelah membaca tulisan ini pandangan saya berubah
      Benar-benar penjelasan yang luar biasa
  • Seri tulisan ini adalah salah satu favorit saya, dan secara pribadi banyak isinya yang membuka mata
    Saya rasa tidak ada materi lain, baik di internet maupun di tempat lain, yang mengumpulkan semua informasi ini di satu tempat. Akan sangat bagus kalau Ian menerbitkannya sebagai buku

    • Buku Linkers and Loaders karya John R. Levine juga cukup bagus
    • Saya mencetak semua 20 bab sebagai PDF, jadi sekarang saya punya semacam buku pribadi
      Hanya saja saya berharap Ian menyediakan versi yang memungkinkan semua bab dilihat dalam satu halaman
  • https://www.airs.com/blog/archives/51
    Ini tentang melakukan pattern matching pada kode assembly, lalu menyusun ulang atau menggunakan kembali sequence

  • Kumpulan komentar sebelumnya: https://news.ycombinator.com/item?id=27445981

  • Saya paham mengapa linker muncul pada masa ketika memori masih terbatas
    Namun saya penasaran apakah linker masih diperlukan di lingkungan dengan memori melimpah seperti sistem modern. Selain itu, bukankah shared library bisa menjadi jalur serangan supply chain, seperti serangan xz yang diblokir awal tahun ini?

    • Saya tahu penggunaan flatpak atau Docker sedang populer, tetapi tetap saja saya tidak ingin ada 30 instance Gtk yang muncul untuk setiap aplikasi GUI yang dijalankan
      Lingkungan seperti Raspberry Pi juga masih perlu dipertimbangkan. Sulit melihat shared library sebagai jalur serangan yang lebih berbahaya daripada aplikasi itu sendiri. Meski mengunduh binary statis, kita tidak tahu apa yang ada di dalamnya, dan saya juga tidak tahu mengapa orang percaya pada separuh image Docker yang diunduh dan dipakai semua orang, tetapi toh mereka tetap menggunakannya
    • Compiler harus melihat seluruh program sekaligus, atau kita memerlukan cara untuk menggabungkan hasil dari beberapa tahap kompilasi
      Kecuali semua file sumber diproses secara bersamaan dengan opsi build yang persis sama, hasilnya harus digabungkan. Bahkan dengan LTO modern, compiler biasanya tidak melihat semua file program pada level source code, dan library C serta C++ biasanya terpisah. Selama berbagai bahasa tidak membuat seluruh program dalam satu tahap kompilasi dan assembly, diperlukan sesuatu untuk menggabungkan hasilnya, dan itulah linker. Bahkan jika semuanya dibangun secara statis, kebutuhan akan runtime linker tidak hilang kecuali alamat persis tempat program akan dijalankan di-hardcode, dan pendekatan semacam itu bertabrakan dengan teknik keamanan seperti ASLR
    • Static linking pun tetap merupakan linking, dan linker diperlukan untuk menggabungkan beberapa object file menjadi satu executable
      Menurut saya, pola pikir bahwa memori dan CPU melimpah adalah salah satu alasan mengapa pengalaman pengguna tidak terasa jauh lebih baik meski hardware sudah menjadi beberapa orde lebih cepat
    • Kelimpahan memori yang tiba-tiba pada sistem modern sudah dikejar dan dihabiskan oleh sandbox, packager, library, dan framework
    • Jika Anda ingin build yang hanya mengubah satu baris kode selesai dalam 30 menit, Anda memerlukan sesuatu yang mirip linker untuk menangani kode terkompilasi dalam unit yang lebih kecil daripada keseluruhan program