1 puan yazan GN⁺ 2025-12-12 | Henüz yorum yok. | WhatsApp'ta paylaş
  • 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.

Henüz yorum yok.