3 puan yazan GN⁺ 2023-12-11 | 1 yorum | WhatsApp'ta paylaş
  • Write Your Own Retro Compiler, Z80 tabanlı CP/M üzerinde çalışan ve aynı ortam için kod üreten self-hosting derleyiciyi tüm kaynak koduyla ele alan 339 sayfalık bir kitaptır
  • Uygulama hedefi olan T3X/0, kökleri Pascal ve BCPL’ye dayanan basit bir dildir; kitapta 20 sayfalık tam kılavuzu yer alır
  • C veya Pascal gibi prosedürel diller ile assembly dili bilgisi gerekir; Z80 assembly ve CP/M temel bilgisi varsa takip etmek daha kolaydır
  • Sözcüksel analiz, sözdizim analizi, kod üretimi, basit optimizasyon, BDOS arayüzü ve runtime kütüphanesi diyagramlar, tablolar ve örneklerle açıklanır
  • Tüm kod public domain olarak sunulur; basılı kitap ve PDF satın alma bağlantıları, içindekiler, örnek sayfalar ve kaynak indirme bağlantıları da yayımlanmıştır

Kitabın kapsamı ve hedef kitlesi

  • Write Your Own Retro Compiler, 2023’te Lulu Press tarafından yayımlanan, 339 sayfalık, 91 görselli, 6" x 9" formatında bir kitaptır
  • Ana konusu, Z80 işlemcili CP/M üzerinde çalışan ve aynı ortamı hedefleyen kod üreten self-hosting bir derleyicidir
  • Derleyici geliştirme deneyimi olmayanların da takip edebileceği şekilde hazırlanmıştır
  • Uygulama dili olan T3X/0, kökleri Pascal ve BCPL’ye dayanan basit bir dildir
  • Kitapta T3X/0 için 20 sayfalık tam bir kılavuz yer alır

Gerekli bilgi birikimi

  • En az bir prosedürel programlama dili bilmek gerekir
    • Örnek olarak C ve Pascal verilir
  • En az bir assembly dili de bilinmelidir; ideal olarak Z80 CPU için assembly bilgisi gerekir
  • CP/M işletim sistemi hakkında temel bilgi de beklenir
  • Kendi kendine öğrenen okurlar için Z80 assembly diline kısa bir giriş de bulunur

Derleyici bileşenleri

  • Çok sayıda diyagram, tablo ve örnekle derleyicinin iç işleyişi açıklanır
  • Ele alınan konular şunlardır
    • Sözcüksel analiz
    • Sözdizim analizi
    • Kod üretimi
    • Basit optimizasyon
    • BDOS arayüzü

      • Runtime kütüphanesi

Bağlantılar ve kod

1 yorum

 
GN⁺ 2023-12-11
Hacker News yorumları
  • Yeni bir derleyici kitabı çıkardım. “Write Your Own Compiler”ın genişletilmiş sürümüne daha yakın; bu kez modern sistemlerdeki ELF yerine Z80 için CP/M kod üretimini ele aldığı için birçok bölüm çok daha basitleşiyor.
    4 MHz Z80 sisteminde 10 dakikadan kısa sürede kendi kendini derleyen bir derleyici yapmak için ne düzeyde karmaşıklık gerektiğini görebilirsiniz. Kod ücretsiz, kitap ise ücretli.

    • Nils’in neler yaptığını görmek her zaman heyecan verici. Umarım bu işleri bir iş olarak da kârlı biçimde sürdürebiliyordur; bir gün hepsini satın alıp takip ederek denemek isterim.
      Ayrıca Forth üzerine dolaysız bir kitap ve Nils tarzı bir yorum da görmek isterim.
  • Yakın zamanda bu eski x86 CPU’lar için TypeScript ile bir C çok geçişli derleyici ve assembler yaptım.
    https://github.com/Mati365/ts-c-compiler

    • Kitaptaki derleyici biraz daha eski olan Z80 için ve çarpma ya da bölme komutu bile yok. Yine de bu derleyici 8086 ve 386 için de kod üretebiliyor.
  • Practical Compiler Construction 2. baskının fiziksel kitabına sahibim ve epey beğeniyorum. İlgilenenlere Nils’in kitaplarını öneririm.

  • Bu kitap eğlenceli görünüyor. Yine de hâlâ The Dragon Book’un düzgün bir devamını bekliyorum.
    Modern CPUları ve mümkünse GPU optimizasyonunu da ele alan; hızlı eşzamanlı çöp toplayıcıya sahip modern bir sanal makinenin nasıl tasarlanıp yazılacağını da anlatan bir kitap olsa iyi olurdu. Bazı açılardan derleyici yazmaktan daha zor bile olabilir.

    • Bob Morgan’ın Building an Optimizing Compiler kitabı modern derleyici optimizasyonuna tamamen odaklanan bir kitap ve 1997’de yayımlandı.
      Denetim akış grafiği oluşturma, bunun üzerinde yapılabilecek çeşitli optimizasyonlar, alias analizi, statik tek atama biçimi, CFG dominator tabanlı optimizasyon, komut zamanlama, register tahsisi ve hedef kod üretimine kadar her şeyi ele alıyor. Çoğu derleyici kitabının aksine sözcüksel analiz, sözdizimi analizi, NFA/DFA gibi konuları işlemiyor.
      Gelişmiş analiz gerektiren optimize edici derleyici yapmak isteyenler için Static Program Analysis de faydalı olabilir: https://cs.au.dk/~amoeller/spa/
      Çöp toplama için de Garbage Collection handbook var: https://gchandbook.org/
    • Öğrenciyken The Dragon Book’u pek sevmediğimi hatırlıyorum. Nedenini artık pek çıkaramıyorum ama muhtemelen yapısının iyi olmadığını, bazı konuların aşırı ayrıntılıyken bazılarının yetersiz açıklandığını düşünmüştüm.
      Belli düzeyde temel bilginiz varsa bu ders hoşunuza gidebilir: https://www.cs.cmu.edu/~janh/courses/411/18/schedule.html
      Özellikle SSA biçimini tanıtma şeklini beğenmiştim.
      Daha ileri konular burada: https://www.cs.cmu.edu/~15745/handouts.html
    • Ben de böyle bir kitap bekliyordum. Bugünlerde modern mikrokod/firmware gibi unsurlar yüzünden işler fazla karmaşıklaştı ve birçok şey sihir gibi geliyor.
      Bir şey “sihir” gibi hissettirdiğinde, bunu birinin sınır sanılan bir şeyi zekice aşmayı başardığının işareti olarak görüyorum. Son zamanlarda, küçük hoparlörlerin gerçekte üretebildiklerinden daha büyük bas veriyormuş gibi görünmesini sağlayan sahte bas hakkında okuyorum; harmonikleri kullanarak beynin gerçekte olduğundan daha düşük bir sesi duyuyormuş gibi kandırılması ilginç.
  • İlginç görünüyor ama okuyucunun önce yeni bir programlama dili olan T3X’i bilmesi ya da öğrenmesi gerekmesi bir dezavantaj.
    Dış dünyayla bağlantısı yalnızca klavye ve ekran olan retro bir CP/M sisteminde sıfırdan derleyici yazıp geliştirmenin mümkün olup olmayacağını da merak ediyorum.

    • Kitabı yazmadan önce bu konu üzerinde çok düşündüm. Sonunda T3X’i seçmemin nedeni, derleyicisinin en küçük C altkümesi derleyicisinden çok daha küçük olması ve kişisel olarak T3X’in öğrenmesi ve anlaması daha kolay olduğunu düşünmemdi.
      SubC 3815 satır, T3X/0 ise 2330 satır.
      Elbette harici araçlar olmadan CP/M üzerinde de başlayabilirsiniz; ama o zaman bootstrap derleyicisini assembler ile yazmanız gerekir. Çok zaman alır ama kesinlikle yapılabilir. Yine de bunun okuma malzemesi olarak ilginç olup olmayacağından emin değilim.
    • Bunu dezavantaj olarak görmüyorum. Derleyici yazmak isteyen biri için yeni bir programlama dili muhtemelen büyük engel değildir; basit ve temiz bir oyuncak dil eğitim için daha iyi bile olabilir.
      C tarzı sözdizimi yerine ALGOL tarzı sözdizimi kullanması biraz şaşırtıcı ama bu benim önyargım olabilir. Kafada DO ve ENDi { ve } ile eşleştirmek çok da büyük yük değil.
  • Sözcüksel analiz ve sözdizimi analizi aşamalarının ötesine geçen bir derleyici öğreticisi ha; neredeyse ilklerden biri olabilir.
    Şaka bir yana, gerçekten de birçok kaynak orada duruyor. Bunu satın almayı düşünüyorum.

  • Kendi CP/M benzeri işletim sistemini yazmaya dair bir kitap da eğlenceli olurdu.

    • O kitap Andrew Tanenbaum’un Operating Systems Design and Implementation kitabı.
      Elbette Unix tarzı mikroçekirdek bir işletim sistemi yapmayı gösteriyor; ama dosya sistemi bölümü hariç hepsini atlarsanız yeter. Ayrıca ağaç veri yapısı tavsiyesine uymayıp yalnızca düz tablolar kullanır ve doğru dosya boyutu uygulamasını da dert etmezseniz, sonuç CP/M olur.
      Şahsen 2. baskıyı tercih ediyorum. 3. baskıda demo Minix kodunun 1980’ler PC’leri yerine 1990’ların sonundaki PC’lerde çalışması için gereksiz yere karmaşıklaştığını düşünüyorum.
  • Olumsuz anlamda yazmıyorum; faydalı olabilecek bir gözlem.
    Ücretsiz bölümleri okudum; konuya çok hâkim olmayan biri için bazı kısımlar zor olabilir gibi göründü. Her başlığın altında “bir dilin grameri...” gibi kavramları en baştan açıklıyor, ama birkaç cümle geçmeden assembler komutları gibi daha ileri konular açıklamasız biçimde ortaya çıkıyor.
    Okuyucu gramerin ne anlama geldiğini öğrenmesi gereken düzeydeyse hemen sonraki cümleleri anlamakta zorlanabilir. Bu yüzden tutarlılık biraz artırılırsa kitabın bütünlüğü daha iyi olabilir.

    • Kitap tanıtımında da yazdığım gibi derleyici yapımı hakkında ön bilgi gerekmiyor; ama okuyucunun en az bir prosedürel dile ve bir assembler diline aşina olması gerektiğini varsaydım.
      Bu yüzden assembler komutları gibi şeyleri okuyucunun bildiğini varsaymanın sorun olmayacağını düşündüm.
      Kitabın ekinde Z80 assembly’ye kısa bir giriş de var; fakat o da assembler’ın temellerinin bilindiğini varsayıyor.
      Her kitap bir yerden başlamak zorunda. Hiç bilgisayar programlama bilgisi olmadığını varsayarak derleyici yapımı kitabı yazmak zor. Yine de bu, bilginin laneti olmadığı anlamına gelmez; bu noktayı kesinlikle aklımda tutacağım.
  • Kitabın gerçek içeriğinden bağımsız olarak, tam isabet retro ve minimal web tasarımı da hoşuma gitti.
    Büyük bir nostalji hissi veriyor. Masamda “HTML 3.2 UNLEASHED!!!!” gibi başlıklı 6 inç kalınlığında bir kitapla kendi sitemi yaptığım güzel anılar aklıma geliyor.

    • Güzel zamanlardı.
      Ama yaklaşık 1500 statik sayfaya genel bir değişiklik uygulamaya çalışınca eğlence bitiyor. Acı henüz kendi CMS’imi yazdıracak kadar büyük değil; yazsam bile tasarımı aynı bırakırdım.
  • https://web.archive.org/web/20231210141834/http://t3x.org/t3...