2 puan yazan GN⁺ 5 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • 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
    1. 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ı

1 yorum

 
GN⁺ 5 시간 전
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.

    • Muhtemelen bilerek böyle tasarlanmıştır.
      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?

    • Dragon Book biraz tuhaf.
      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.
    • Sadece 2006 baskısının önsözüne bakınca bile yazarların bu kitabı genel olarak lisansüstü düzey ders kitabı olarak gördüğü anlaşılıyor.
      “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ı.

    • Şart değil.
      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.
    • Assembly üretimi aslında epey basit; zor olan her şeyi optimize etme kısmı.
      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.
    • Yeni bir dil öğrenirken en sevdiğim şey hızlıca bir lexer/parser ve REPL yapmak.
      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.

    • Lisans düzeyinde, dillerin nasıl çalıştığına dair temel konuların izini süren bir yapı gibi görünüyor.
      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.
    • Programlama dil tasarımı öğrenmek için hangi kitabı önerirsiniz? Hangi konuların eksik olduğunu merak ediyorum.
  • Yapay zeka konuları ve gürültüsü arasında böyle bir derleyici yazısı görmek sevindirici.

    • Körü körüne yapay zeka nefretinin tuhaf yanı, kanıt olmadan herhangi bir yazıya AI çöpü etiketi yapıştırıldığında yapay zeka karşıtı kesimin de bunu temelsizce beğenmemesi.
      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.