- 1988~1995 yılları arasında yayımlanan Jack Crenshaw'ın ‘Let’s Build a Compiler’ kılavuzunu Python ve WebAssembly ile yeniden uygulayan bir proje
- Orijinalde Pascal ve Motorola 68000 assembly kullanılmıştı, ancak bu çalışmada modern bir ortamda çalışabilir koda dönüştürüldü
- Kılavuzun odak noktası, özyinelemeli iniş ayrıştırıcısını (recursive-descent parser) doğrudan uygulamak ve ilk aşamalardan itibaren gerçek assembly kodu üretmeye geçmek oldu
- Crenshaw’nin yaklaşımı söz dizimi yönlendirmeli çeviri (syntax-directed translation) kullanıyor, ancak tip işleme aşamasında sınırlılıklarını gösteriyor
- Bu yeniden uygulama, klasik kılavuzu modern geliştiricilerin doğrudan çalıştırıp deneyebileceği bir biçimde geri getirmesi açısından önem taşıyor
Klasik kılavuzun arka planı
- Jack Crenshaw'ın ‘Let’s Build a Compiler’ 1988~1995 yılları arasında yayımlanan, bugün hâlâ sıkça anılan bir derleyici yapım eğitim kaynağıdır
- Orijinal metin Pascal ile yazılmıştı ve Motorola 68000 assembly kodu üretirdi
- 35 yıl sonra, 2025'te bile Hacker News gibi platformlarda düzenli olarak gündeme geliyor
- Yazar bu kılavuzla 2003'te ilk kez karşılaştığında derin bir etki aldığını ve 2025'te onu Python ile WebAssembly'e yeniden taşıdığını anlatıyor
Python ve WebAssembly ile yeniden uygulama
- Sadece okumakla kalmayıp, kılavuzun derleyicisini Python'a çevirip WebAssembly (WASM) üretecek şekilde uygulanmış
- Çıktı, GitHub deposunda (eliben/letsbuildacompiler) yayınlanıyor
TUTORIAL.md dosyasında her bölümün orijinal metinden Python koduna nasıl eşlendiği açıklanıyor
- Kullanıcılar, orijinal kılavuzu okurken doğrudan çalıştırılabilir kodlar ile deney yapabiliyor
KISS dili örneği ve WASM çıktısı
- Crenshaw tarafından tasarlanan KISS dilinin örnek programı, Python sürümü derleyici ile derlenmiş hâliyle gösteriliyor
- Örnek,
procedure, while döngüsü ve değer iletimi ile referans iletimini içeriyor
- Üretilen WASM metni, başvuru parametresi (by-reference parameter) işleme mantığını içeriyor ve optimizasyon neredeyse hiç uygulanmamış
main fonksiyonunda global değişken Xin örtülü olarak döndürülmesi, test kolaylığı için eklenmiş bir düzenektir
- Üretilen WASM kodu, gerçek çalıştırmayla beklenen sonucu doğrulamak için testlerde kullanılıyor
Kılavuzun güçlü yönleri
- Crenshaw’nin kılavuzu özyinelemeli iniş ayrıştırıcısını adım adım inşa ederken, karmaşık teoriye göre doğrudan çalışan kod üretimine öncelik verir
- O dönemde
lex ve yacc standart araçlar olarak görülmesine rağmen, el ile yazılan ayrıştırıcının sadeliği ve açıklığı güçlü bir etki bırakır
- Yazar daha sonraki 20 yıl boyunca manuel özyinelemeli iniş ayrıştırıcısını tercih etmeye başlar
- Ayrıca çoğu dersin yalnızca sözdizimi çözümlemeye odaklandığı bir dönemde Crenshaw, başlangıç aşamalarından itibaren assembly kod üretimini ele alır
Sınırlamalar ve geliştirme potansiyeli
- Kılavuz, ayrıştırma sırasında doğrudan kod üretmek için söz dizimi yönlendirmeli çeviri (syntax-directed translation) yaklaşımını kullanır
- Bu yöntem eğitici olarak faydalı olsa da, önceden tür bilgisinin bilinmemesinden dolayı optimizasyonun zor olduğu bir sınıra takılır
- Özellikle türlerin 14. bölümde tanıtılmasından sonra orta seviye temsil (IR) veya AST kullanan yapısal bir yaklaşımın gerekliliği ortaya çıkar
- Crenshaw'nin 14. bölümden sonra kılavuza ara vermesinin nedeni belirtilmemiş olsa da, bunun bu sınırlamayla ilgili olabileceği öne sürülüyor
- Yazar, 14. bölümü bir dönüm noktası kabul ederek, tür denetimi ve kod üretiminin AST üretildikten sonra yapılmasının daha uygun olduğu görüşünde
Sonuç
- Orijinal kılavuz, hâlâ bir derleyici yapım giriş kitabı olarak yüksek okunabilirlik ve pratiklik sunuyor
- Bu Python·WASM sürümü, modern geliştiricilerin eski teknolojilere saplanmadan öğrenebilmeleri için tamamlayıcı bir uygulama olarak sunuluyor
- GitHub deposu sayesinde herkesin deney yapabilmesi mümkün; derleyici mimarisini doğrudan deneyimleme şansı veren modern bir yeniden yorum olarak değerlendiriliyor
Henüz yorum yok.