1 puan yazan GN⁺ 2024-08-24 | 1 yorum | WhatsApp'ta paylaş
  • Dağınık halde duran Ian Lance Taylor’ın 20 bölümlük linker yazı dizisini tek seferde takip edebilmek için bir LWN kullanıcısı tarafından içindekiler listesi olarak düzenlendi
  • Asıl metin, gold linker’ının yazarı Ian Lance Taylor tarafından kaleme alındı; numara odaklı yazılar, bölüm başlıklarına göre yeniden bulunması kolay olacak şekilde gruplandı
  • İlk bölümler linker kavramı, kişisel geçmiş, dinamik linking, object dosyası formatları, shared library’ler, ELF sembolleri, relocation ve TLS optimizasyonuna kadar uzanıyor
  • Sonraki bölümler sembol çözümleme, statik/dinamik linking karşılaştırması, link time optimization, COMDAT, C++ template instantiation, exception frame’ler ve incremental linking ile devam ediyor
  • İçindekiler listesi ve yorumlar public domain olarak yayımlandığından kopyalama, kullanım ve türev çalışmalar için herhangi bir kısıtlama yok

20 Bölümlük Linker Yazı Dizisini Kolay Bulunur Hale Getiren İçindekiler Listesi

  • Ian Lance Taylor’ın 20 bölümlük linker yazıları ardışık olarak kolay okunabilecek bir içindekiler listesi halinde düzenlendi
  • Ian’ın blogunda veya LWN’de iyi bağlanmış bir içindekiler listesi bulmak zor olduğundan ayrı bir liste oluşturuldu
  • Yazı URL’leri ardışık numaralara sahip olsa da her yazının konusunu tek bakışta görmek için içindekiler listesi kullanışlı
  • Her yazı yalnızca numarayla anıldığı için başlıklar çoğunlukla Ian’ın bölüm başlıklarından alınarak oluşturuldu

Dahil Edilen Yazılar

Yayın Koşulları

  • Bu içindekiler listesi ve yorumlar public domain olarak yayımlandı
  • Kullanım, kopyalama, icra etme ve türev çalışmalar oluşturma konusunda kısıtlama yok; ek izin de gerekmiyor

1 yorum

 
GN⁺ 2024-08-24
Hacker News yorumları
  • Biri tamamını tek bir e-kitapta birleştiren bir Calibre tarifi bağlantısı paylaşmıştı; ihtiyaç duyanlar için çıktıyı buraya koyuyorum
    https://www.mediafire.com/folder/b8fdqx7eqcpdl/linker
    veya
    https://0x0.st/Xycy.azw3
    https://0x0.st/Xyct.epub
    https://0x0.st/Xycv.mobi
    https://0x0.st/Xycw.pdf

  • lld ve mold linker’ları üzerinde çalışan geliştirici performansı sonuna kadar zorlamış
    LLD (LLVM’in parçası):
    https://llvm.org/devmtg/2017-10/slides/Ueyama-lld.pdf
    MOLD linker:
    https://github.com/rui314/mold/blob/main/docs/design.md
    Apple da mold’a benzer seviyede yeni bir linker yayımladı; önceki tartışma burada: https://news.ycombinator.com/item?id=36218330

    • Bunu her gördüğümde performans arayışının kolay kolay bitmediği konusunda ilham alıyorum
      LLD hızlı olmak üzere tasarlanmıştı, ondan önceki Gold da öyleydi; ama Mold ikisini de büyük farkla geçti
  • [2008] tarihli yazılar ama bunlar gerçekten altın değerinde kaynaklar; HN ana sayfasına tekrar çıkmaları her zaman sevindirici

    • Birinin bir linker hatasını düzelttiğini duyunca “ne kadar zor olabilir ki” diye düşünmüştüm; bu yazıyı görünce fikrim değişti
      Gerçekten harika bir açıklama
  • Bu yazı dizisi en sevdiğim yazılardan biri; kişisel olarak bana göz açtıran çok şey içeriyordu
    İnternette ya da başka yerde tüm bu bilgileri tek bir yerde toplayan bir kaynak olduğunu sanmıyorum. Keşke Ian bunu kitap olarak yayımlasaydı

    • John R. Levine’in Linkers and Loaders adlı kitabı da oldukça iyi
    • 20 bölümün tamamını PDF olarak yazdırdım; artık kişisel bir kitap gibi elimde duruyor
      Yine de Ian’ın tüm bölümleri tek bir sayfada görülebilecek bir sürüm sunmasını isterdim
  • https://www.airs.com/blog/archives/51
    Assembly kodunda örüntü eşleme yapıp dizileri yeniden yerleştirme veya yeniden kullanma üzerine

  • Önceki yorum derlemesi: https://news.ycombinator.com/item?id=27445981

  • Belleğin sınırlı olduğu dönemlerde linker’ın neden ortaya çıktığını anlıyorum
    Ama modern sistemlerdeki gibi belleğin bol olduğu ortamlarda linker’ın hâlâ gerekli olup olmadığını merak ediyorum. Üstelik paylaşımlı kütüphaneler, bu yılın başında engellenen xz saldırısında olduğu gibi bir tedarik zinciri saldırı yolu olmuyor mu diye düşünüyorum

    • flatpak veya Docker gibi şeyleri kullanmanın moda olduğunu biliyorum; yine de çalıştırdığım her GUI uygulaması için 30 Gtk örneği açılmasını istemem
      Raspberry Pi gibi ortamlar da hâlâ hesaba katılmalı. Paylaşımlı kütüphaneleri uygulamanın kendisinden daha tehlikeli bir saldırı yolu olarak görmek zor. Statik bir ikili indirseniz de içinde ne olduğunu bilemezsiniz; herkesin indirip kullandığı Docker imajlarının yarısına neden güvendiğini de bilmiyorum ama sonuçta böyle kullanılıyor
    • Derleyicinin tüm programı tek seferde görmesi gerekir ya da birden fazla derleme aşamasının çıktılarını birleştirmenin bir yoluna ihtiyaç vardır
      Tüm kaynak dosyaları aynı anda, tam olarak aynı derleme seçenekleriyle işlemediğiniz sürece çıktıları birleştirmeniz gerekir. Modern LTO olsa bile derleyici genelde programın tüm dosyalarını kaynak kod düzeyinde göremez; C kütüphanesi ile C++ kütüphanesi de çoğunlukla ayrıdır. Birden fazla dil tüm programı tek bir derleme/assembly aşamasında üretmediği sürece çıktıları birleştirecek bir şeye ihtiyaç vardır; işte bu linker’dır. Her şeyi statik olarak derleseniz bile programın çalışacağı kesin adresi sabit olarak koda yazmadığınız sürece çalışma zamanı linker’ı ihtiyacı ortadan kalkmaz; böyle bir yöntem de ASLR gibi güvenlik teknikleriyle çakışır
    • Statik linkleme de hâlâ linklemedir; birden çok nesne dosyasını tek bir çalıştırılabilir dosyada birleştirmek için linker gerekir
      Bellek ve CPU’nun bol olduğu düşüncesi, donanım birkaç mertebe hızlanmış olmasına rağmen kullanıcı deneyiminin gözle görülür biçimde iyileşmemesinin nedenlerinden biri bence
    • Modern sistemlerde bellekteki ani bolluk; sandbox’lar, paketleyiciler, kütüphaneler ve framework’ler tarafından yeterince hızlı yakalanıp tamamen tüketildi
    • Sadece tek bir kod satırını değiştirdiğiniz bir derlemenin 30 dakika içinde bitmesini istiyorsanız, tüm programdan daha küçük birimlerdeki derlenmiş kodu işleyecek linker benzeri bir şeye ihtiyacınız vardır