CS 6120: Kursus Online Mandiri Compiler Tingkat Lanjut (2020)
(cs.cornell.edu)- CS 6120, mata kuliah tingkat doktoral dari Cornell CS, menawarkan alur pembelajaran terpadu dari representasi menengah, aliran data, optimisasi, paralelisasi, JIT, hingga garbage collection bagi siapa pun yang ingin mempelajari compiler dan implementasi bahasa pemrograman secara sistematis
- Versi belajar mandiri ini disusun seperti mengambil 4 SKS tanpa nilai di universitas virtual, dengan jadwal linear yang memandu peserta mengikuti video, catatan kuliah, bacaan paper, dan tugas implementasi
- Praktikum menggunakan LLVM dan IR pendidikan Bril untuk membantu memverifikasi konsep compiler yang abstrak lewat penulisan kode nyata
- Berbeda dari kelas Cornell yang sebenarnya, tenggat tugas bisa diabaikan, tetapi peserta tidak dapat ikut diskusi Zulip, dan sebagai pengganti proyek akhir semester ada tugas penutup khusus versi belajar mandiri
- Materi kuliah dibuka sebagai open source di GitHub sehingga siapa pun dapat melaporkan masalah, dan setelah selesai peserta bisa mengirim masukan lewat formulir umpan balik
Struktur kursus dan cara mengikuti
- CS 6120 adalah mata kuliah implementasi bahasa pemrograman yang dibuat oleh Adrian Sampson dari Cornell CS
- Membahas topik dasar compiler umum sekaligus topik yang bernuansa riset
- representasi menengah
- aliran data
- optimisasi klasik
- paralelisasi
- kompilasi JIT
- garbage collection
- Pembelajaran berlanjut ke membaca paper dan tugas mengutak-atik open source
- Kurikulum belajar mandiri disusun sebagai jadwal linear yang menggabungkan menonton video dan membaca paper
- Beberapa pelajaran mencakup tugas implementasi, dengan penulisan kode terbuka untuk memahami konsep abstrak
- Ada perbedaan antara CS 6120 reguler dan versi belajar mandiri
- tenggat tugas bisa diabaikan
- tidak dapat berpartisipasi di thread diskusi Zulip
- kelas reguler memiliki proyek akhir semester
- tugas akhir versi belajar mandiri adalah “mengubah dunia dengan sihir compiler”
- Kursus ini tersedia sebagai open source di GitHub sehingga bug bisa dilaporkan jika ada masalah
- Setelah selesai, peserta dapat mengisi formulir umpan balik
Alur pelajaran dan bahan bacaan
-
Pengantar dan representasi program
-
Dasar analisis dan optimisasi
-
LLVM serta analisis loop dan antarprosedur
-
Manajemen memori dan compiler dinamis
-
Paralelisme dan compiler cepat
- Lesson 13: Concurrency & Parallelism
- Lesson 14: Fast Compilers
- hanya judul yang tercantum dalam daftar
1 komentar
Opini Hacker News
Bagian kompiler dinamis hampir seluruhnya lebih dekat ke pembahasan tentang trace compilation. Secara umum, trace compilation adalah jalan buntu dan sudah beberapa kali ditinggalkan
Menurut saya, konsep yang lebih penting di sini adalah type feedback, speculative execution dan deoptimisasi, kompiler cepat, serta layering
Secara keseluruhan kuliahnya terlihat bagus, dan sangat bagus juga bahwa sebanyak ini materi dibuka secara online
Seperti yang disebutkan, saya ingin ada konteks tambahan tentang hal-hal yang benar-benar bekerja di industri
Hanya saja, area ini mungkin cukup sempit dan juga sangat berbeda dari kompiler tradisional, jadi kalau melihat sebagian dari yang kami lakukan, Anda mungkin akan merasa agak tidak nyaman
Tentu saja saya paham bahwa ruang masalahnya sangat berbeda dari TraceMonkey atau LuaJIT
Saya sempat berbicara dengan salah satu pengembang saat itu, mungkin Jason Orendorff, dan dia berkata bahwa tracing tidak terlalu berhasil, meski mungkin bisa bekerja dalam kondisi yang terbatas
Namun, saya benar-benar lupa apa kondisi itu
LuaJIT bekerja dengan baik pada program besar, juga pada ratusan juta server dan perangkat
Sangat disayangkan bahkan para akademisi terus mengulang klise ini. Rasanya seperti pepatah bahwa ketidaktahuan adalah berkah
Tulisan terkait sebelumnya:
CS 6120: Advanced Compilers: The Self-Guided Online Course - https://news.ycombinator.com/item?id=39577878 - Maret 2024, 102 komentar
Advanced Compilers: Self-Guided Online Course - https://news.ycombinator.com/item?id=35130975 - Maret 2023, 82 komentar
Advanced Compilers: Self-Guided Online Course - https://news.ycombinator.com/item?id=25386756 - Desember 2020, 232 komentar
Saya agak bingung mengapa kuliah ini disebut lanjutan. Sebagian besar topik, misalnya dead code elimination, data flow, dominator analysis, dan bentuk SSA, tampak seperti hal yang masuk ke kuliah kompiler pertama
Singkatnya, kompiler pada dasarnya dibagi menjadi dua mata kuliah, dan mata kuliah pertama membahas unsur minimum untuk membuat kompiler: analisis leksikal, parsing, code generation, dan register allocation
Mata kuliah kedua membahas cara membuat kompiler pengoptimal
Dalam praktiknya, entah itu kompiler atau interpreter, backend hampir selalu dibiarkan sebagai “latihan untuk pembaca”
Sulit dibayangkan betapa banyak hal yang masih harus dicari tahu, seperti cara membuat closure, melacak environment, pattern matching, representasi memori, dan lain-lain
Semua hal yang menarik harus dicari sendiri
PS: ini baru untuk satu tahun saja: https://gist.githubusercontent.com/mamcx/e1743571b9a1ea163a7...
Saya sudah membaca dua buku tentang interpreter dan kompiler, dan backend tidak banyak dibahas
Mungkin ini lebih dekat ke kuliah pengantar backend
Apakah ada lagi kuliah ilmu komputer tingkat universitas online yang self-guided seperti ini?
Beberapa profesor juga membuka kuliah dan tugas di luar framework “mooc”
Saya pernah mendapat jawaban dari profesor ketika bertanya lewat komentar. Internet kadang memang masih keren
Dibandingkan dengan Writing a C compiler karya Nora Sandler, bagaimana perbedaan manfaat yang bisa didapat pembaca?
Jika Anda pemula atau sekadar mendalaminya sebagai hobi, lebih baik mulai dari buku itu atau materi serupa, lalu mencoba kuliah ini sambil menutup kekosongan pengetahuan
Apakah ada kuliah belajar mandiri tentang compiler dasar yang bisa dilihat sebelum masuk ke tahap lanjutan?
Jika ingin mulai dari interpreter, Essentials of Programming Languages [4] bagus
Saya paham Crafting Interpreters populer di situs ini dan di tempat lain, tetapi secara pribadi saya tidak terlalu menyukainya. Meski begitu, banyak orang lain menyukainya, jadi layak dicoba dan bisa dibaca gratis
EOC dan EOPL memang agak akademis, tetapi menurut saya cukup mudah diakses kecuali bagi orang yang kurang nyaman dengan Scheme dan Racket. Versi Python dari EOC mengurangi masalah itu
Setelah itu, buku-buku compiler yang lebih mendalam dan akademis terasa jauh lebih mudah didekati
[1] https://mitpress.mit.edu/9780262047760/essentials-of-compila... - versi Racket, tersedia versi open access
[2] https://mitpress.mit.edu/9780262048248/essentials-of-compila... - versi Python, tersedia versi open access
[3] https://nostarch.com/writing-c-compiler - bisa memilih bahasa implementasi
[4] https://mitpress.mit.edu/9780262062794/essentials-of-program... - Scheme, tetapi bisa digunakan di Racket
Terdiri dari dua bagian; bagian pertama membuat interpreter tree-walk dalam Java, lalu berlanjut ke versi yang ditulis dalam C
https://github.com/jamiebuilds/the-super-tiny-compiler
Jika dibaca bersama beberapa buku modern yang direkomendasikan di sini, itu seharusnya sudah cukup
David Gries - https://www.cs.cornell.edu/gries/ dan https://en.wikipedia.org/wiki/David_Gries
Ilmuwan komputer Belanda Dick Grune menulis tentang Compiler Construction for Digital Computers bahwa “beberapa generasi pembuat compiler tumbuh bersama buku ini, dan mereka tidak menyesal”
Dick Grune sendiri juga terkenal lewat buku-buku tentang compiler dan bahasa pemrograman - https://dickgrune.com/index.html dan https://en.wikipedia.org/wiki/Dick_Grune
Saya pernah mendengar podcast tentang compiler Rust, dan sepertinya dikatakan bahwa pada titik tertentu ada algoritme machine learning yang dipakai untuk menentukan apakah suatu kode bisa membuat sistem crash
Ada sumbernya?
Saya benar-benar penasaran apa yang dilakukan alexia massalin belakangan ini selain menerima royalti paten microunity