Kendi Retro Derleyicinizi Geliştirmek
(t3x.org)- 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
- Kitaptaki tüm kod public domaindir
- Basılı kitap siparişi
- PDF kopya siparişi
- İçindekiler PDF
- Örnek sayfalar PDF
- Kaynak kod indirme
- Kod sayfası
1 yorum
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.
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
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.
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/
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
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.
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.
C tarzı sözdizimi yerine ALGOL tarzı sözdizimi kullanması biraz şaşırtıcı ama bu benim önyargım olabilir. Kafada
DOveENDi{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.
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.
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.
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...