3 puan yazan GN⁺ 2024-03-04 | 1 yorum | WhatsApp'ta paylaş
  • Cornell CS'nin doktora düzeyindeki CS 6120 dersi için çevrimiçi olarak takip edilebilecek, ders videolarını, notları, makale okumalarını ve uygulama ödevlerini bir araya getiren kendi temponuzda ilerlenen bir müfredat
  • Ara gösterimler, veri akışı ve klasik optimizasyonlar gibi derleyicilerin temel konularından paralelleştirme, JIT derleme ve çöp toplama konularına kadar uzanıyor
  • Uygulamalarda LLVM ve eğitim amaçlı IR olan Bril kullanılıyor; soyut kavramları doğrudan hayata geçirmeyi sağlayan açık kaynak hackleme ödevleriyle devam ediyor
  • Kendi temposunda sürümde son teslim tarihleri göz ardı edilebilse de gerçek dersin Zulip tartışmalarına ve dönem sonu projesine katılım mümkün değil
  • Materyaller GitHub'da açık kaynak olarak yayımlanıyor; sorun bildirebilir ve dersi tamamladıktan sonra geri bildirim formunu doldurabilirsiniz

Dersin işlenişi ve kapsadığı alanlar

  • CS 6120, Cornell CS bünyesinde Adrian Sampson tarafından hazırlanan bir programlama dilleri gerçekleştirim dersidir
  • Ders kapsamı, derleyici gerçekleştirimine yönelik ortak temelleri ve araştırma odaklı konuları birlikte içerir
    • Ara gösterimler
    • Veri akışı
    • “Klasik” optimizasyonlar
    • Paralelleştirme
    • JIT derleme
    • Çöp toplama
  • Öğrenme süreci makale okumaları ve açık kaynak hackleme ödevleri üzerinden ilerler
    • Uygulamalarda LLVM ve ders için kullanılan eğitim IR'si Bril kullanılır
  • Kendi temponuzda ilerlenen müfredat, “hayali bir üniversitede” 4 kredilik, not verilmeyen bir ders alıyormuşsunuz gibi düzenlenmiştir
    • Dersler doğrusal bir sırayla dizilmiştir
    • Her derste video ve yazılı notlar bulunur
    • Bazı derslerde uygulama ödevleri yer alır
    • Video izleme ile makale okumayı harmanlayacak önerilen bir sıra sunulur

Gerçek dersten farkları

  • Kendi temposunda öğrenenler ödev son teslim tarihlerini dikkate almayabilir
  • Gerçek dersteki Zulip tartışmalarına katılamaz
  • Gerçek CS 6120 dersinde bir dönem sonu projesi bulunur
    • Kendi temposundaki sürümün dönem sonu ödevi, “derleyici büyüsüyle dünyayı değiştirmek”tir
  • Özellikle ilk derslerde üretim kalitesi düşük olabilir
  • CS 6120 materyalleri GitHub üzerinde açık kaynak olarak yayımlanır; bir sorun bulursanız hata bildirebilirsiniz
  • Tamamladıktan sonra geri bildirim formunu doldurabilirsiniz

Dersler ve okuma materyalleri

1 yorum

 
GN⁺ 2024-03-04
Hacker News yorumları
  • Lisansı bitirip ilk tam zamanlı işimi ararken, bu ders sayesinde MANGA’nın (Meta, Apple, NVIDIA, Google, Amazon) derleyici mühendisliği ekiplerindeki mülakatları geçebildim
    University of Waterloo’nun düşük seviyeli bilişim sistemleri müfredatı da çok iyiydi ve açık kaynak derleyici projelerine de katkı yapıyordum; ama mülakattaki en zor soruları yanıtlamamda asıl büyük yardımı bu ders sağladı

    • “par excellent” değil par excellence; ayrıca o cümle yapısında da kulağa garip geliyor
      Daha doğal yazmak için “my university has the low level computing systems curriculum par excellence” gibi bir ifade daha iyi olurdu
  • Derleyici yazmadan önce bilgisayar mimarisini anlamak ve en verimli makine kodunu üretmek için derleyicinin ne üretmesi gerektiğini bilmek gerektiğini düşünüyorum
    Ancak deneyimime göre okullar ve üniversiteler bilgisayar mimarisini, hatta sistem programlamayı bile giderek öncelik listesinden düşürüyor; muhtemelen fazla teknik gördükleri için
    Yine de bu bilgi, sektörde iyi işler bulmak için çok önemli

    • Üniversitelerin sistem programlamasının önceliğini düşürdüğü doğru, ama bunun nedeni “fazla teknik” olması değil
      Üniversitelerle çalışırken gördüğüm temel sorun, sınırlı ders saatine sığdırılması gereken potansiyel içeriğin aşırı fazla olması
      Alanımızda bilinmesi gereken bilgi miktarı zamanla üstel biçimde artıyor ve zaten sınırları aşmış durumda; bu yüzden genel yolda sistem programlama ders saatlerinin azalması, her yıl daha fazla öğrenci için daha az ilgili hale gelmesinden kaynaklanıyor ve makul
    • Sektörde bahsettiğin iyi işler tam olarak nedir ve neden böyle düşündüğünü biraz daha açıklayabilir misin?
    • Derleyicileri bu düzeyde düşük seviyeli ayrıntılara girmeden kullanabilir hale gelmemizi sektörün büyük ilerlemelerinden biri olarak görüyorum
      Derleyici düzeyinde hâlâ yapılacak çok iş var, ama bunların önemli bir kısmı bilgisayarın mikromimari düzeyine kadar düşünmeyi gerektirmemeli
    • GPU ile ilgili işler hâlâ ciddi bilgisayar mimarisi ve derleyici yetkinliği gerektiriyor
      x86 ya da MIPS çalışmaya gerek olmasa bile CUDA, onlardan daha tuhaf bir yapı gösteriyor
    • Deneyimime göre kimse düşük seviyeli ayrıntıları “fazla teknik” diye görmüyor
      Düşük seviyeli konuların vurgulanmamasının olağan nedeni, uygulamaya göre değişmeleri, hızla eskimeleri ve genelleştirilmelerinin zor olması
      Ayrıca “sistem programcısı” tipiyle pek uyuşmuyorum; bu kişiler bu aşırı spesifik ansiklopedik bilgileri tüm mesleki kimlikleri haline getirme eğiliminde olduğundan, assembly yazabilen ama functor’ın ne olduğunu bilmeyen insanlar ortaya çıkabiliyor
  • İleri düzey derleyici optimizasyonunu derinlemesine ele alan iyi akademik materyal yok gibi
    Çok aradım ama derslerin çoğu giriş seviyesinde; gerçekten ilginç teknikler için popüler açık kaynak derleyicilerin kaynak kodunun derinlerine inmek gerekiyor, bu da beni epey şaşırttı

    • Akademik derslerin çoğu parsing konusuna aşırı odaklanmış, geri kalanını ise yalnızca yüzeysel öğretiyor gibi görünüyor
  • Derleyicilerin yaklaşık 30 yıldır pek ilerlemeyen alanlardan biri olduğunu düşünüyorum
    2004~2006’da Perugia University’de ders verirken 15~25 yıllık materyalleri pek sorun yaşamadan kullanabiliyordum
    Son zamanlarda durum değişmiş gibi

    • Bu doğru değil
      2004~2006’da yeni içerik olarak öğretebileceğin ama muhtemelen işlemediğin şeylerden sadece aklıma ilk gelenler SSA inşası, SLP vektörleştirme ve otomatik peephole süperoptimizasyonu
      Değişmeyen şey derleyici ders kitapları. Parser üreteci yapmaya gereğinden fazla odaklanıyorlar; derleyicinin pratikte nasıl tasarlanacağını, modern bilgisayar mimarisi tasarımını ise neredeyse hiç anlatmıyorlar. Bu şikâyet onlarca yıldır var
    • Katılmıyorum
      Son 10 yılda manzara artımlı derleme teknikleri yönünde ciddi biçimde evrildi
      Teorik ilerleme çoğunlukla parser’larda sıkışmış durumda, ama gerçek uygulamalar tüm pipeline boyunca küresel program optimizasyonundan kod üretimine kadar uzanıyor
    • O zamandan bu yana derleyici testi epey değişti ve büyük ölçekli rastgele testler yaygınlaştı
    • Derleyici tasarımı ya da uygulamasında uzman değilim, ama derleyicilerin hedeflediği makine kodu ve assembly zaman içinde epey değişmiş gibi
      Her yeni işlemci nesliyle komutlar ve seçenekler arttıkça derleyicilerin yararlanabileceği yeni optimizasyonlar ya da kombinasyonlar ortaya çıkıyor gibi görünüyor
    • Muhtemelen çoğu programlama dilinin emirsel yapı, döngüler ve yaygın yan etkiler gibi açılardan pek değişmemiş olmasındandır
      Saf fonksiyonel diller için derleyici yazmak istiyorsan kesinlikle yeni materyallere ihtiyaç olur
  • Böyle bir ders olduğu için sevindim
    Artık ileri konularda yönlendirme alarak kendi hızımda ilerleyebilirim
    Hep derleyici mühendisi kariyeri istemiştim, ama yaşadığım yerde eğitim ve iş fırsatları çok değil
    ABD’ye bakınca işe alım piyasasındaki rekabet inanılmaz sert görünüyor ve açıkçası bu alana nasıl gireceğimi bilmiyorum
    Sahip olduğum deneyim, lisans sırasında aldığım tek bir dersten ibaret; ama o dersin tamamı gerçekten çok iyiydi

    • Bu alanda birçok kişinin aşamadığı acımasız bir öğrenme eğrisi var
      Başka kodu manipüle eden kod yazmak gerekiyor ve genelde semantik ile davranış hedefleri epey farklı oluyor. Üstüne çok fazla sözlü aktarılan bilgi ve gürültü de var
      Bu yüzden derleyici ekipleri, zaten uzun süredir derleyici geliştirmiş kişileri özellikle tercih ediyor. Ama elbette bir bootstrapping sorunu var; bu nedenle büyük ekipler o eğriyi aşma potansiyeli görünen mezunları da alıyor, ben de kabaca böyle girdim
      Genel olarak deneyimin var ama derleyici deneyimin yoksa, alışık olduğun işi yapan ve aynı zamanda derleyici ekibi de bulunan bir şirkete, kabaca “oldukça büyük bir yazılım şirketine” girip yatay geçiş kovalamak belirgin bir strateji
  • “A Unified Theory of Garbage Collection”ın da dahil olması güzel
    En azından bu öğrenciler referans sayımı ile izlemeli çöp toplama arasındaki farkı doğru anlayacak

  • “CS 6120, Adrian Sampson’ın programlama dili uygulaması üzerine Cornell CS doktora düzeyi dersi” ise, epey ileri düzey bir ders mi?
    Bilgisayar bilimlerinde kendimi doktora düzeyinde görmüyorum

    • Hazır oluş seviyesini geleneksel diploma aşamalarıyla ölçmemek daha iyi
      Sadece dene; yapabiliyorsan hazırsındır, yapamıyorsan henüz değilsindir
    • Doktora dersi olması, lisanstan daha zor olduğu anlamına gelmez
      Sadece bir dene
  • 20 yıl önce Gerhard Goos’un verdiği genel derleyici inşası dersinde işlenenlerle hâlâ genel olarak benzer görünüyor
    Daha yeni makalelere de bağlantı verilmiş, bir bakılabilir
    Steven Muchnick’in Advanced Compiler Design and Implementation kitabını severdim
    18 yıldır derleyici kaynak kodu görmediğim için özellikle profil çıkarma ve yol tabanlı optimizasyon tarafında geri kalmış hissediyorum; günümüzde makine öğrenmesine bakınca daha ileri SIMD konularının da çokça ortaya çıkmış olabileceğini düşünüyorum

  • Birkaç yıl önce yazın bu çevrimiçi dersi takip ettim ve gerçekten çok şey öğrendim
    Bril IR’daki küçük bir issue için PR açıp profesörle birlikte düzeltme süreci çok sürükleyiciydi

  • Bu dersin ön koşul dersi olup olmadığını merak ediyorum