CS 6120: उन्नत compiler का self-guided online कोर्स (2020)
(cs.cornell.edu)- Cornell CS का PhD-स्तर का कोर्स CS 6120 उन लोगों के लिए intermediate representation, data flow, optimization, parallelization, JIT, और garbage collection तक एक सतत प्रवाह में देता है जो compiler और programming language implementation को व्यवस्थित रूप से सीखना चाहते हैं
- self-guided संस्करण एक काल्पनिक विश्वविद्यालय में 4-credit बिना ग्रेड के रूप में पढ़ने का प्रारूप है, जिसमें वीडियो, handwritten notes, paper reading, और implementation assignments को linear schedule के अनुसार follow कराया जाता है
- प्रैक्टिस के लिए LLVM और शैक्षणिक IR Bril का उपयोग किया जाता है, ताकि abstract compiler concepts को वास्तविक code लिखकर समझा जा सके
- वास्तविक Cornell कक्षा से अलग, इसमें assignment deadlines को नज़रअंदाज़ किया जा सकता है, लेकिन Zulip चर्चा में भाग नहीं लिया जा सकता, और semester-end project की जगह self-guided संस्करण के लिए अलग अंतिम assignment दिया गया है
- कोर्स सामग्री GitHub पर open source के रूप में उपलब्ध है, इसलिए समस्याएँ report की जा सकती हैं, और पूरा करने के बाद feedback form के जरिए सुधार संबंधी राय भेजी जा सकती है
कोर्स की संरचना और पढ़ने का तरीका
- CS 6120 Cornell CS के Adrian Sampson द्वारा बनाया गया programming language implementation कोर्स है
- इसमें सामान्य-purpose compiler के बुनियादी विषयों और research प्रकृति के विषयों को साथ में कवर किया जाता है
- intermediate representation
- data flow
- classical optimization
- parallelization
- JIT compilation
- garbage collection
- सीखने की प्रक्रिया paper reading और open source hacking assignments तक जाती है
- self-guided curriculum वीडियो देखने और papers पढ़ने को मिलाकर बने linear schedule में व्यवस्थित है
- कुछ lessons में implementation assignments शामिल हैं, जिनमें खुली शैली में code लिखकर abstract concepts सीखे जाते हैं
- वास्तविक CS 6120 और self-guided संस्करण में अंतर है
- assignment deadlines को नज़रअंदाज़ किया जा सकता है
- Zulip discussion threads में भाग नहीं लिया जा सकता
- वास्तविक कक्षा में semester-end project होता है
- self-guided संस्करण का अंतिम semester assignment है “compiler के जादू से दुनिया बदलना”
- कोर्स GitHub पर open source के रूप में उपलब्ध है, इसलिए समस्या होने पर bug report की जा सकती है
- पूरा करने के बाद feedback form भरा जा सकता है
lessons और reading materials का प्रवाह
-
परिचय और program representation
-
analysis और optimization की बुनियाद
-
LLVM और loop व interprocedural analysis
-
memory management और dynamic compilers
-
parallelism और fast compilers
- Lesson 13: Concurrency & Parallelism
- Lesson 14: Fast Compilers
- सूची में केवल शीर्षक शामिल है
1 टिप्पणियां
Hacker News टिप्पणियाँ
dynamic compiler वाला हिस्सा लगभग पूरी तरह trace compilation पर केंद्रित लगता है। आम तौर पर trace compilation एक dead end रहा है और इसे कई बार छोड़ा गया है
यहाँ इससे ज़्यादा महत्वपूर्ण concepts मुझे type feedback, speculative execution और deoptimization, fast compilers, और tiering लगते हैं
पूरी lecture series अच्छी लगती है, और इतना सारा material online उपलब्ध कराना भी शानदार है
जैसा आपने कहा, मैं इस बारे में और context देना चाहूँगा कि industry में असल में क्या अच्छी तरह काम करता है
हालाँकि यह क्षेत्र काफ़ी narrow हो सकता है, और पारंपरिक compilers से भी बहुत अलग है, इसलिए हम जो कुछ करते हैं उसे देखकर आपको काफ़ी असहज लग सकता है
बेशक, मुझे पता है कि इसका problem space TraceMonkey या LuaJIT से बेहद अलग है
मैंने उस समय के एक developer से बात की थी, शायद Jason Orendorff, और उनका कहना था कि tracing ठीक से काम नहीं कर पाता, हालाँकि सीमित परिस्थितियों में यह संभव हो सकता है
लेकिन वे परिस्थितियाँ क्या थीं, यह मैं पूरी तरह भूल चुका हूँ
LuaJIT बड़े programs में भी, और करोड़ों servers और devices पर भी, अच्छी तरह काम करता है
यह सच में अफ़सोस की बात है कि academics भी यह घिसी-पिटी बात दोहराते रहते हैं। अज्ञान सुख है वाली कहावत याद आती है
पिछले संबंधित पोस्ट:
CS 6120: Advanced Compilers: The Self-Guided Online Course - https://news.ycombinator.com/item?id=39577878 - मार्च 2024, 102 टिप्पणियाँ
Advanced Compilers: Self-Guided Online Course - https://news.ycombinator.com/item?id=35130975 - मार्च 2023, 82 टिप्पणियाँ
Advanced Compilers: Self-Guided Online Course - https://news.ycombinator.com/item?id=25386756 - दिसंबर 2020, 232 टिप्पणियाँ
मुझे थोड़ा भ्रम है कि यह course advanced क्यों है। ज़्यादातर topics, जैसे dead code elimination, data flow, dominator analysis, और SSA form, ऐसे लगते हैं जैसे वे compiler की पहली class में होने चाहिए
संक्षेप में, compiler असल में दो courses में बँटा है, और पहला course compiler बनाने के लिए न्यूनतम ज़रूरी चीज़ों—lexical analysis, parsing, code generation, और register allocation—को cover करता है
दूसरा course optimizing compiler बनाने के तरीक़े पर है
वास्तव में, चाहे compiler हो या interpreter, backend लगभग हमेशा “reader के लिए exercise” बनकर रह जाता है
closures कैसे बनाएँ, environment को कैसे track करें, pattern matching, memory representation—ऐसी कितनी चीज़ें हैं जिन्हें अभी भी समझना बाकी है, इसका अंदाज़ा लगाना मुश्किल है
सारी दिलचस्प चीज़ें ख़ुद ही खोजनी पड़ती हैं
प.स.: यह तो बस एक साल की सामग्री है: https://gist.githubusercontent.com/mamcx/e1743571b9a1ea163a7...
मैंने interpreter और compiler पर दो किताबें पढ़ी हैं, और उनमें backend पर ज़्यादा चर्चा नहीं थी
शायद यह backend की intro class के क़रीब हो सकता है
क्या इस तरह के और self-guided online university-level computer science courses हैं?
कुछ professors “mooc” framework के बाहर भी lectures और assignments public करते हैं
जब मैंने comments में सवाल पूछा था, तो एक professor ने जवाब भी दिया था। इंटरनेट कभी-कभी अब भी काफ़ी शानदार लगता है
Nora Sandler की Writing a C compiler की तुलना में, पाठक को क्या अलग फ़ायदा मिलेगा?
अगर आप beginner हैं या शौकिया तौर पर इसमें उतर रहे हैं, तो बेहतर होगा कि पहले उस किताब या उसी स्तर की सामग्री से शुरुआत करें, फिर इस course को आज़माते हुए अपनी कमियाँ भरें
क्या उन्नत स्तर पर जाने से पहले देखने लायक कोई बेसिक compiler self-paced course भी है?
अगर आप interpreter से शुरुआत करना चाहते हैं, तो Essentials of Programming Languages [4] अच्छा है
मैं मानता हूँ कि इस साइट और दूसरी जगहों पर Crafting Interpreters काफ़ी लोकप्रिय है, लेकिन व्यक्तिगत रूप से मुझे यह पसंद नहीं है। फिर भी दूसरे लोग इसे पसंद करते हैं, इसलिए इसे आज़माया जा सकता है और यह मुफ़्त में उपलब्ध है
EOC और EOPL थोड़ी academic तरफ़ हैं, लेकिन Scheme और Racket से असहज लोगों को छोड़कर, मुझे लगता है कि वे काफ़ी approachable हैं। EOC का Python version उस समस्या को कम करता है
उसके बाद ज़्यादा गहरी और academic compiler किताबों तक पहुँचना आसान हो जाता है
[1] https://mitpress.mit.edu/9780262047760/essentials-of-compila... - Racket version, open access version उपलब्ध है
[2] https://mitpress.mit.edu/9780262048248/essentials-of-compila... - Python version, open access version उपलब्ध है
[3] https://nostarch.com/writing-c-compiler - implementation language चुनी जा सकती है
[4] https://mitpress.mit.edu/9780262062794/essentials-of-program... - Scheme है, लेकिन Racket में इस्तेमाल किया जा सकता है
यह दो हिस्सों में है, और पहला हिस्सा Java में tree-walk interpreter बनाता है, फिर C में लिखे गए version तक आगे बढ़ता है
https://github.com/jamiebuilds/the-super-tiny-compiler
यहाँ सुझाई गई कुछ आधुनिक किताबों के साथ इसे पढ़ें तो काफ़ी होगा
David Gries - https://www.cs.cornell.edu/gries/ तथा https://en.wikipedia.org/wiki/David_Gries
डच computer scientist Dick Grune ने Compiler Construction for Digital Computers के बारे में लिखा था, “compiler बनाने वालों की कई पीढ़ियाँ इस किताब के साथ बड़ी हुई हैं, और उन्हें इसका पछतावा नहीं हुआ”
Dick Grune खुद भी compiler और programming language की किताबों के लिए मशहूर हैं - https://dickgrune.com/index.html तथा https://en.wikipedia.org/wiki/Dick_Grune
मैंने Rust compiler पर एक podcast देखा था, और लगता है उसमें कहा गया था कि किसी code से system crash हो सकता है या नहीं, यह तय करने में किसी बिंदु पर machine learning algorithm शामिल होता है
क्या इसके लिए कोई source है?
मुझे सच में जिज्ञासा है कि alexia massalin आजकल microunity patent royalty लेने के अलावा और क्या कर रही हैं