CS 6120: İleri Düzey Derleyiciler için Kendi Kendine İlerlenen Çevrimiçi Ders (2020)
(cs.cornell.edu)- Cornell CS'in doktora düzeyindeki CS 6120 dersi, derleyicileri ve programlama dili gerçekleştirimini sistematik olarak öğrenmek isteyenler için ara gösterimlerden veri akışına, optimizasyondan paralelleştirmeye, JIT'ten çöp toplamaya kadar uzanan içeriği tek bir akışta sunuyor
- Kendi kendine ilerlenen sürüm, sanal bir üniversitede 4 kredilik notsuz ders alma biçiminde kurgulanmış; videolar, ders notları, makale okumaları ve uygulama ödevleri doğrusal bir takvimle takip ediliyor
- Uygulamalarda, soyut derleyici kavramlarını gerçek kod yazarak doğrulamak için LLVM ve eğitim amaçlı IR olan Bril kullanılıyor
- Gerçek Cornell dersiyle farklı olarak ödev teslim tarihleri göz ardı edilebiliyor, ancak Zulip tartışmalarına katılım mümkün değil; dönem sonu projesi yerine kendi kendine sürüme özel son bir ödev veriliyor
- Ders materyalleri GitHub'da açık kaynak olarak yayımlandığı için sorunlar bildirilebiliyor; tamamlandıktan sonra geri bildirim formu üzerinden iyileştirme önerileri gönderilebiliyor
Ders yapısı ve katılım biçimi
- CS 6120, Cornell CS bünyesinde Adrian Sampson tarafından hazırlanmış bir programlama dili gerçekleştirim dersi
- Genel amaçlı derleyicilerin temel konularını ve araştırma niteliğindeki başlıkları birlikte ele alıyor
- Ara gösterimler
- Veri akışı
- Klasik optimizasyonlar
- Paralelleştirme
- JIT derleme
- Çöp toplama
- Öğrenme süreci, makale okumaları ve açık kaynak hackleme ödevleriyle devam ediyor
- Kendi kendine ilerlenen müfredat, video izleme ile makale okumayı harmanlayan doğrusal bir takvim olarak düzenlenmiş
- Bazı derslerde uygulama ödevleri bulunuyor ve açık uçlu kod yazımıyla soyut kavramların öğrenilmesi hedefleniyor
- Gerçek CS 6120 ile kendi kendine sürüm arasında farklar var
- Ödev teslim tarihleri göz ardı edilebiliyor
- Zulip tartışma başlıklarına katılım mümkün değil
- Gerçek derste bir dönem sonu projesi var
- Kendi kendine sürümün dönem sonu ödevi “derleyici büyüsüyle dünyayı değiştirmek”
- Ders, GitHub'da açık kaynak olarak yayımlandığı için sorun varsa bug bildirimi yapılabiliyor
- Tamamlandıktan sonra geri bildirim formu doldurulabiliyor
Dersler ve okuma materyali akışı
-
Giriş ve programların gösterimi
-
Analiz ve optimizasyonun temelleri
-
LLVM ve döngü/prosedürler arası analiz
-
Bellek yönetimi ve dinamik derleyiciler
-
Paralellik ve hızlı derleyiciler
- Lesson 13: Concurrency & Parallelism
- Lesson 14: Fast Compilers
- Yalnızca başlık listede yer alıyor
1 yorum
Hacker News görüşleri
Dinamik derleyici kısmı neredeyse tamamen trace compilation ile ilgili görünüyor. Genel olarak trace compilation çıkmaz bir yoldu ve defalarca terk edildi.
Bence burada daha önemli kavramlar type feedback, spekülatif yürütme ve deoptimization, hızlı derleyiciler ve katmanlı yapı.
Dersin geneli iyi görünüyor ve bu kadar çok materyalin çevrimiçi yayımlanmış olması da harika.
Dediğin gibi, sektörde gerçekte iyi çalışan şeyler hakkında daha fazla bağlam vermek isterim.
Ancak bu alan oldukça dar olabilir ve geleneksel derleyicilerden de çok farklı, bu yüzden yaptığımız bazı işlere bakınca epey rahatsız olabilirsiniz.
Elbette problem alanının TraceMonkey veya LuaJIT'ten son derece farklı olduğunun farkındayım.
O sırada geliştiricilerden biriyle, sanırım Jason Orendorff'tu, konuşmuştum; tracing'in pek iyi işlemediğini, ancak sınırlı koşullarda mümkün olabileceğini düşünüyordu.
Yalnız bu koşulların ne olduğunu tamamen unuttum.
LuaJIT büyük programlarda da, yüz milyonlarca sunucu ve cihazda da iyi çalışıyor.
Akademisyenlerin bile bu klişe lafı tekrar edip durması gerçekten üzücü. İnsan bilmediği şeyden korkar sözü aklıma geliyor.
Önceki ilgili yazılar:
CS 6120: Advanced Compilers: The Self-Guided Online Course - https://news.ycombinator.com/item?id=39577878 - Mart 2024, 102 yorum
Advanced Compilers: Self-Guided Online Course - https://news.ycombinator.com/item?id=35130975 - Mart 2023, 82 yorum
Advanced Compilers: Self-Guided Online Course - https://news.ycombinator.com/item?id=25386756 - Aralık 2020, 232 yorum
Bu dersin neden ileri seviye olduğu biraz kafamı karıştırıyor. Dead code elimination, data flow, dominator analysis, SSA form gibi konuların çoğu ilk derleyici dersinde yer alacakmış gibi görünüyor.
Kısacası derleyiciler fiilen iki derse bölünüyor ve ilk ders bir derleyici yapmak için gerekli asgari unsurları, yani lexical analysis, parsing, code generation ve register allocation konularını ele alıyor.
İkinci ders ise optimizasyon yapan derleyicilerin nasıl oluşturulacağıyla ilgili.
Gerçekte ister derleyici ister yorumlayıcı olsun, backend neredeyse her zaman “okuyucuya bırakılan alıştırma” olarak kalıyor.
Closure oluşturma, environment takibi, pattern matching, bellek gösterimi gibi daha keşfedilecek o kadar çok şey var ki bunu hayal etmek bile zor.
İlginç olan her şeyi kendiniz araştırmak zorundasınız.
Not: Bu sadece bir yılın materyali: https://gist.githubusercontent.com/mamcx/e1743571b9a1ea163a7...
Yorumlayıcılar ve derleyiciler üzerine iki kitap okudum, ama backend çok işlenmiyordu.
Belki de bu daha çok backend'e giriş dersi gibidir.
Bunun gibi başka kendi kendine yürütülen, çevrimiçi, üniversite düzeyinde bilgisayar bilimi dersleri var mı?
Bazı hocalar “mooc” çerçevesinin dışında da derslerini ve ödevlerini yayımlıyor.
Yorumda soru sorduğumda yanıt veren hocalar da olmuştu. İnternet hâlâ zaman zaman gerçekten harika olabiliyor.
Nora Sandler'ın Writing a C compiler kitabıyla karşılaştırıldığında, okurun elde edeceği kazanım nasıl farklı olur?
Yeni başlayanlar ya da hobi olarak kurcalayanlar için önce o kitap veya benzer seviyedeki materyallerle başlamak, ardından bu dersi deneyip eksikleri tamamlamak daha iyi olur.
İleri seviyeye geçmeden önce izlenebilecek temel bir derleyici odaklı kendi kendine ilerlenen ders var mı?
Yorumlayıcıdan başlamak istiyorsanız Essentials of Programming Languages [4] iyi bir seçenek
Bu sitede ve başka yerlerde Crafting Interpreters'ın popüler olduğunu kabul ediyorum ama şahsen pek sevmiyorum. Yine de başkaları seviyor, bu yüzden denemeye değer ve ücretsiz erişilebilir
EOC ve EOPL biraz akademik tarafta kalıyor ama Scheme ve Racket'tan rahatsız olmayanlar için bence oldukça erişilebilirler. EOC'nin Python sürümü bu sorunu azaltıyor
Sonrasında daha derin ve akademik derleyici kitaplarına yaklaşmak daha kolay oluyor
[1] https://mitpress.mit.edu/9780262047760/essentials-of-compila... - Racket sürümü, açık erişim sürümü var
[2] https://mitpress.mit.edu/9780262048248/essentials-of-compila... - Python sürümü, açık erişim sürümü var
[3] https://nostarch.com/writing-c-compiler - uygulama dili seçilebilir
[4] https://mitpress.mit.edu/9780262062794/essentials-of-program... - Scheme, ancak Racket üzerinde kullanılabilir
İki bölümden oluşuyor; ilkinde Java ile ağaç dolaşımlı bir yorumlayıcı yapılıyor, ardından C ile yazılmış sürüme geçiliyor
https://github.com/jamiebuilds/the-super-tiny-compiler
Burada önerilen birkaç modern kitapla birlikte okunursa yeterli olur
David Gries - https://www.cs.cornell.edu/gries/ ve https://en.wikipedia.org/wiki/David_Gries
Hollandalı bilgisayar bilimci Dick Grune, Compiler Construction for Digital Computers hakkında “birkaç nesil derleyici geliştiricisi bu kitapla büyüdü ve bundan pişman olmadılar” diye yazmıştı
Dick Grune da derleyici ve programlama dili kitaplarıyla tanınır - https://dickgrune.com/index.html ve https://en.wikipedia.org/wiki/Dick_Grune
Rust derleyicisiyle ilgili bir podcast dinlemiştim; sistemi çökertme potansiyeli olan kodu belirlemek için bir noktada makine öğrenimi algoritması kullanıldığını söylemiş gibiydiler
Bir kaynak var mı?
alexia massalin'in bugünlerde microunity patent telifleri almak dışında ne yaptığını gerçekten merak ediyorum