Derleyiciler ve Dil Tasarımına Giriş Ders Kitabı (2021)
(dthain.github.io)- Notre Dame CSE 40243 derleyici dersi için geliştirilmiş ücretsiz çevrimiçi ders kitabı; tam PDF ve bölüm bazlı PDF'ler doğrudan indirilebilir
- Bir dönemlik kapsamda derleyici geliştirme akışını izleyerek üst düzey dil programlarını alt düzey dil programlarına çevirme sürecini ele alır
- Öğrencinin hedefi, C benzeri bir dili girdi olarak alıp X86 veya ARM assembly'sine dönüştüren basit bir derleyici gerçekleştirmektir
- C programlama deneyimi olan, veri yapıları ve bilgisayar mimarisi dersi almış lisans düzeyindeki öğrenciler için en uygundur
- PDF'ler kişisel ve akademik kullanım için serbesttir; ancak ticari baskı ve dağıtım yasaktır ve en güncel materyaller compilerbook.org üzerinden kontrol edilmelidir
Notre Dame derleyici dersi temelli kitap
- Introduction to Compilers and Language Design, Douglas Thain tarafından University of Notre Dame'daki CSE 40243 derleyici dersi için geliştirilen ücretsiz bir çevrimiçi ders kitabıdır
-
- baskı 2020 sürümüdür ve son düzenleme tarihi 15 Ocak 2021 olarak belirtilmiştir
- Basılı kitap isteyen okuyucular hardcover veya paperback sürümlerini satın alabilir
- Kitap, sıfırdan derleyici yapma süreci üzerinden bilgisayar biliminin teorik ve pratik yönlerini birlikte ele alır
- Nihai öğrenme hedefi, C benzeri bir dili girdi olarak alıp X86 veya ARM assembly'sine çeviren basit bir derleyici uygulamaktır
PDF, örnek kodlar ve kullanım koşulları
- Tam kitap PDF'i ve bölüm bazlı PDF'ler sunulmaktadır
- Eklerde Sample Course Project, The B-Minor Language, Coding Conventions yer alır
- compilerbook-examples GitHub deposunda kitapla eşleşen uygulama materyalleri bulunur
- çeşitli scanner ve parser örnekleri
- proje derleyicisi için başlangıç kodu yapısı
- scanner, parser, type checker ve code generator aşamalarının her biri için örnek test vakaları
- PDF'ler kişisel ve akademik amaçlarla indirilebilir, yazdırılabilir ve kullanılabilir
- Ticari baskı veya dağıtım yasaktır; PDF'leri yerelde kopyalayıp dağıtmak yerine öğrencileri compilerbook.org sayfasına yönlendirmek gerekir
- Yazım hataları veya diğer hatalar, konu satırı
Compiler Book Errataolacak şekildedthain@nd.eduadresine e-postayla bildirilebilir
1 yorum
Hacker News yorumları
Üniversitede Dr. Thain’in derleyici dersini almıştım; gerçekten harikaydı.
Çok iyi bir eğitmendi ve ders projesi sayesinde C tarzı bir derleyiciyi adım adım kendimiz yapabilmiştik. Buradaki örnek proje de o zaman yaptığımız projeye epey benziyor; sonuna kadar takip etmeyi kesinlikle öneririm.
Henüz hangi derste ele alındığını bilmiyorum ama C4(https://news.ycombinator.com/item?id=8558822) ve C4x86(https://news.ycombinator.com/item?id=8746054) bir dönemlik öğrenme konusu için iyi olabilir.
Kendini derleyebilen, çok küçük bir C altkümesi derleyicisi olduğu için, özellikleri genişleten ek ödevler için de iyi bir temel gibi görünüyor.
İlgili yazılar: Introduction to Compilers and Language Design (2021) - https://news.ycombinator.com/item?id=31388741 - Mayıs 2022, 68 yorum
Introduction to Compilers and Language Design - https://news.ycombinator.com/item?id=19728749 - Nisan 2019, 1 yorum
C ve onun tuhaf gelenekleri etrafındaki dar bir kapsamda dönüp duruyor gibi hissettiriyor.
Kitabın açıklamasında da “okurun C’ye benzer bir dili kabul eden basit bir derleyici oluşturmasını sağlayan, bir dönemlik giriş kitabı” deniyor.
Önsöze göre Dragon Book ileri düzey lisansüstü seviyede mi oluyor?
Klasik bir eser ama hesaplama kuramının temellerine ancak bir miktar değiniyor; derleyicilerle ilgili geri kalan kısmı ise daha çok hızlıca üstünden geçiyor.
Modern lisansüstü düzey derleyici konularını doğru dürüst ele almıyor, pratik bir kitap da değil. Tiger Book, pratik ve teori dengesi açısından çok daha iyi bir giriş kitabı.
Gerçekten ileri düzey derleyici konularının tek bir kitapla iyi kapsanmasının zor olduğunu düşünüyorum.
“Bu kitabın tamamını veya büyük bölümünü işlemek için en az iki çeyrek dönem ya da iki yarıyıl gerekir. Genellikle ilk yarı lisans dersinde, kod optimizasyonunu vurgulayan ikinci yarı ise lisansüstü ya da orta düzey ikinci bir derste işlenir” deniyor.
Dil tasarlayan ve derleyici yapan insanlara bakınca bazen gerçekten hayran kalıyorum.
Merak edip kendi dilimi yapmayı denedim ama çok zor geldiği için basit bir C backend ile yetindim. LLVM’e katkı yapanlar sanki assembly üretimine kadar her şeyi biliyor olmalı; gerçekten şaşırtıcı.
Web geliştiricisiydim, sonra LLVM tabanlı derleyiciler üzerine çalışmaya geçtim; LLVM’in kendisi devasa olduğu için tüm alanlarını ve mekanizmalarını öğrenmek kolay değil.
Ama karmaşık olmayan pass yazımı, hata düzeltmeleri ve regresyon düzeltmeleri için aşırı özel bilgi gerekmiyor.
Bir assembler yazmayı denemek, derleyici yapısına alışmak için iyi bir yöntem. Çünkü optimizasyon, tipler ya da yüksek seviyeli dilleri karmaşıklaştıran pek çok özellikle uğraşmanız gerekmez.
Kendi oluşturduğun dil gramerinin frontend’ini ve küçük bir değerlendirme döngüsünü uygulamak bile gerçek bir dilin birçok yönünü görmeni sağlar. Gerçek problem çözmenin ayrıntılarına takılmadığı için öğrenmek ve öğretmek için de iyidir.
Bu yüzden basit bir C backend ile yetindiğin için utanmana hiç gerek yok.
Sadece içindekiler kısmına göz gezdirince bile dil tasarımının ana konularının çoğu görünmüyor.
Başlıktan ziyade daha çok “derleyicilere giriş” gibi duruyor.
Python veya Ruby’yi, ya da daha basit bir Pascal derleyicisini anlamaya uygun bir seviye.
Derleyiciler ve dil tasarımı bu sektör kadar eski alanlar olduğu için tek bir derse sığmayacak kadar çok bilgi var. Yine de bu ders iyi; Dragon Book temelli benzer derslerden de daha iyi olduğunu düşünüyorum.
Yapay zeka konuları ve gürültüsü arasında böyle bir derleyici yazısı görmek sevindirici.
Doğru ve kaliteli yapay zeka kullanımı da değerlidir, yapay zeka olmayan işler de değerlidir. İnsanların emeğini gelişigüzel küçümsemek yerine, yapay zeka bağlantılı çıktılar için makul ölçütler olsa iyi olur.
Güzel yazı.
Harika örneklerle eskiden öğrendiğim bilgileri yeniden netleştirip bileylemesi etkileyici.