Yorumlayıcı Geliştirme Teknikleri
(craftinginterpreters.com)- Crafting Interpreters, kendi dilini oluşturmayı denemek isteyen okurların tam bir betik dili implementasyonunu baştan sona izleyebilmesi için kurgulanmış bir kitaptır
- Ayrıştırma ve semantik gibi dil tasarımı kavramlarından bayt kod gösterimi ve çöp toplama gibi çalışma zamanı implementasyonlarına kadar tek bir akışta ele alır
- Okur
main()den başlayarak dinamik tipler, leksik kapsam, birinci sınıf fonksiyonlar, closure’lar, sınıflar ve kalıtım içeren bir dili bizzat implemente eder - Birkaç bin satırlık temiz ve hızlı kodun tamamını doğrudan yazdırarak, tamamlanan sonuçtan çok iç işleyişi anlamaya odaklanır
- Basılı kitap, eBook, PDF ve web formatlarında sunulur; web’de tüm bölümler, ek yazılar ve illüstrasyonlar ücretsiz okunabilir
Kitabın implementasyon kapsamı
- Crafting Interpreters, kendi programlama dilini oluşturmak isteyen veya dillerin nasıl tasarlanıp implemente edildiğini merak eden okurları hedefler
- Kitap, tam özellikli bir betik dili implemente etmek için gereken temel konuları birlikte ele alır
- Ayrıştırma
- Semantik
- Bayt kod gösterimi
- Çöp toplama
- Implementasyon
main()den başlar ve sonunda aşağıdaki özelliklere sahip bir dile genişler- Zengin sözdizimi
- Dinamik tipler
- Leksik kapsam
- Birinci sınıf fonksiyonlar
- Closure’lar
- Sınıflar
- Kalıtım
Okuma biçimi ve ortaya çıkan ürün
- Okur örnek kodu yalnızca görmek yerine her satırı bizzat yazarak dil işleyicisinin iç yapısını takip eder
- Nihai kod birkaç bin satır ölçeğindedir ve temiz, hızlı bir implementasyonu hedefleyecek şekilde kurgulanmıştır
- Üst düzey kavramlar ile düşük seviyeli implementasyonu ayrı ayrı açıklamak yerine, tek bir dili tamamlama sürecinde birlikte anlaşılacak şekilde tasarlanmıştır
Sunulan formatlar
-
Basılı kitap
- 640 sayfalık basılı kitaptır; yüksek çözünürlüklü elle çizilmiş illüstrasyonlar ve yazarın bizzat yaptığı dizgiyle hazırlanmış tipografi sunar
- Amazon.com
- Barnes and Noble
- Download Sample PDF
-
eBook
- E-kitap okuyuculara ve ekran boyutlarına uygun CSS, tam renkli sözdizimi vurgulama ve canlı hiperlinkler sunar
- Kindle Amazon.com
- Apple Books
- Play Books Google
- Nook B&N
- EPUB Smashwords
-
PDF
- Basılı kitaptaki el emeği dizgiyi ve net illüstrasyonları aynen yansıtırken kolay taşınabilir şekilde sunulur
- Buy from Payhip
- Download Free Sample
-
Web
- Masaüstünden telefona kadar uyum sağlayan duyarlı tasarımla sunulur; tüm bölümler, ek yazılar ve illüstrasyonlar ücretsiz okunabilir
- Read Now
1 yorum
Hacker News yorumları
Yazarıyım. Kitabıma gelen olumlu tepkileri görmek gerçekten içimi ısıtıyor. Ona çok zaman ve sevgi harcadım; umduğum etkiyi yarattığını görmek büyük bir tatmin
Bu kaynak sayesinde özgüvenim ciddi şekilde arttı ve o projeyi hâlâ en sevdiğim işlerden biri olarak hatırlıyorum
Lox için derleyici ya da JIT gibi bir devam kitabı yazmayı düşünüp düşünmediğini de merak ediyorum. Bir de lexical analygator müthiş; şirket içi sunumlarda kaynak gösterilerek defalarca yer aldı, hatta bir ara beyaz tahtada fan art’ı bile vardı
Bazı yazarlar sanki bu alanın tamamen kara büyüymüş gibi gösterilmesi gerektiğini düşünüyor; belki de GoF tasarım kalıplarını anlayacak kadar iyi olmayan bendim
Crumb’ı (https://github.com/liam-ilan/crumb) yaparken Crafting Interpreters’ı okudum; özellikle kapsamlar ve yerel değişkenler bölümü vazgeçilmezdi
Teknik uygulama ile kavramsal içgörü arasındaki denge iyi olduğu için, kitabın belirlediği yoldan sapmaya çalışırken bile çok yardımcı oluyor. Bu tür teknik yazılar için hedef gösterilecek kadar yüksek seviyeli bir kaynak
Dokümantasyon da iyi, proje de harika
Bu kitapta en sevdiğim kısım, aynı dil için iki farklı yorumlayıcı yazmaya yönlendirmesi
Bu sayede programlama dili yapma sürecinin daha karmaşık ve incelikli kısımlarını iyi anlayabiliyorsunuz. Kitabın ilk yarısında büyük fikirlerle önce karşılaşıp onlara alıştıktan sonra, ikinci yorumlayıcıda tekrar karşınıza çıktıklarında ilginç kısımları gerçekten özümseyebiliyorsunuz. Gerçekten şaşırtıcı derecede iyi bir kitap
Diğer derleyici kaynakları da konuşulmuşken, henüz tamamını izlemedim ama Immo Landwerth’in C# ile derleyici yapıp IL ve debug sembolleri vb. ürettiği videolar da iyiydi
Yaklaşık 5 yıl öncesine ait olduğu için güncel C# sözdizimi değil; sanırım .NET Core 3 civarı bir dönemden, ama çoğu iş için büyük sorun olmayacaktır. Yalnız nullable türlerle ilgili uyarılar çok çıkabilir
https://www.youtube.com/playlist?list=PLRAdsfhKI4OWNOSfS7EUu...
Çoğu programcının bir noktada bu kitabı baştan sona takip etmesi gerektiğini düşünüyorum. Bunu yapınca derleyicilerin ya da dil araçlarının içinde gerçekte neler olup bittiğini çok daha iyi anladım
Şimdiye kadar takip ettiğim teknik rehberler arasında en iyi yazılmışlardan biri; kavramları gerçekten sahiplenmeme çok yardımcı oldu. Bu kavramlar yalnızca derleyicilerde değil, pek çok yerde işe yarıyor
Bu kitabın ikincil ama belki de aynı derecede önemli bir avantajı açıklığı öğretmesi
Metin, kod, yapı ve tempo tamamen açık ve öz. “Crafting” kelimesi tam yerine oturuyor; zanaatkârın zanaatkârlar için yazdığı bir kitap gibi hissettiriyor
Bence bu kitap, programlama dili derleyicileri yolculuğunun ikinci ya da üçüncü adımı olmalı
İlk adım, yorumlayıcılar veya dil tasarımı hakkında hiçbir şey bilmeden, kendi yaptığın basit bir dil için tek başına bir yorumlayıcı yazmaya çalışmak. İkinci adım, daha az hata yaparak onu yeniden yazmak
Bunu yapmadan bu konunun inceliklerini gerçekten takdir etmek zor; önemli görünmeyen kavramların üzerinden kolayca geçiliyor
Her tekniği en baştan kendin yeniden icat etmek zorunda değilsin. Devlerin omuzlarında yükselmek doğal bir şey
CI gibi bir şeyi önce okumasaydım kendi yorumlayıcımı yazmayı denemezdim bile; üçüncü adıma da ulaşamazdım
Özyineleme yoktu; her şeyi doğrudan stack’e koyup çıkarıyordum. Sorun, ayrıştırmayı doğru anlamadığım için dilin çoğunu string.split ve string.replace ile uygulamam ve beklenildiği gibi iç içe geçirilemeyen kavramların ortaya çıkmasıydı. Kaynak kodu saklamadığıma üzülüyorum
Birkaç gün geçmeden o kadar çok hatayla karşılaştım ki daha akademik bir tutum edinip kitap okumaya başladım. Yine de harika bir ilk adımdı; böyle bir deneme olmasa bunun bir kitaplık konu olduğunu bile fark etmeyebilirdim
Böyle bir adanmışlığa sahip insanlara ve geliştirme altyapısını sürdüren herkese gerçekten saygı duyuyorum; ama kendi “dilimi yapmak istiyorum” evremin kısa süreli bir heves olarak bitmiş olmasına seviniyorum
İş yükü gerçekten muazzam
Parametrik polimorfizm ve temel tür çıkarımı gibi şeylere sahip statik tür denetimli bir dil yapmak için iyi kaynaklar bilen var mı, merak ediyorum
Crafting Interpreters’ta değişken kapsamı, fonksiyonlar, closure’lar, sınıflar ve dinamik dispatch, kontrol akışı gibi öğretmek istediğim neredeyse tüm kavramları içerebilecek küçük ve kendi içinde bütünlüklü bir dil yapılabileceğini hissetmiştim
Buna karşılık tür sistemlerinde tasarım alanında çok fazla yol ayrımı var ve net bir “en iyi” rota yok. Alt türleme var mı, jenerikler siliniyor mu yoksa somutlaştırılıyor mu, jenerik kod derleme zamanında özelleştiriliyor mu, tür çıkarımı yerel mi yoksa Hindley-Milner mı gibi seçimlerin hepsi birer yol ayrımı
Hangi seçimi yaparsan yap, seçmediğin dallardaki önemli içerikleri kaçırmış ve başka bir yolu bekleyen okurları hayal kırıklığına uğratmış olabilirsin. Belki Types and Programming Languages gibi daha geniş kapsamlı bir genel bakış kitabı daha uygun olabilir, ama o zaman da tek bir tutarlı şeyi adım adım inşa etmenin keyfi kaybolur
Aynı kitabın C ve Java sürümleri de var ama bence daha zayıflar. ML sürümüyle birlikte kullanmak daha iyi olur
Ben https://github.com/wh5a/Algorithm-W-Step-By-Step/blob/master... içindeki uygulamanın çok eski tarz olduğunu görüp modernleştirerek ve düzenleyerek https://gist.github.com/kccqzy/fa8a8ae12a198b41c6339e8a5c459... hâline kadar getirdim. Sonra algoritmanın nasıl bozulduğunu görmek için çeşitli kısımları bilerek “bozdum”
Yalnızca sihirbazların yapabileceğini sandığım bir bilgisayar bilimi işini erişilebilir bir şekilde denemeyi şiddetle tavsiye ederim. Bir iki tanesini başardıktan sonra, zor olsa da çoğunlukla dişini sıkıp ilerlemekten ibaret olduğunu fark ediyor ve büyük bir özgüven kazanıyorsun. Bu yola girmek isteyenler zellyn@(most things) üzerinden benimle iletişime geçebilir