2 पॉइंट द्वारा GN⁺ 1 일 전 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 तक जाती है
    • LLVM का उपयोग किया जाता है
    • कक्षा के लिए शैक्षणिक IR Bril का उपयोग किया जाता है
  • 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 का प्रवाह

1 टिप्पणियां

 
GN⁺ 1 일 전
Hacker News टिप्पणियाँ
  • dynamic compiler वाला हिस्सा लगभग पूरी तरह trace compilation पर केंद्रित लगता है। आम तौर पर trace compilation एक dead end रहा है और इसे कई बार छोड़ा गया है
    यहाँ इससे ज़्यादा महत्वपूर्ण concepts मुझे type feedback, speculative execution और deoptimization, fast compilers, और tiering लगते हैं
    पूरी lecture series अच्छी लगती है, और इतना सारा material online उपलब्ध कराना भी शानदार है

    • ऐतिहासिक रूप से tracing एक organizing principle के रूप में practical नहीं निकला, लेकिन मुझे लगता है कि यह ऐसा concept है जिसे सीखना सोच का दायरा बढ़ाता है
      जैसा आपने कहा, मैं इस बारे में और context देना चाहूँगा कि industry में असल में क्या अच्छी तरह काम करता है
    • मैं PyTorch के torch.compile पर काम कर रहा हूँ, और यह भी एक tracing compiler है
      हालाँकि यह क्षेत्र काफ़ी narrow हो सकता है, और पारंपरिक compilers से भी बहुत अलग है, इसलिए हम जो कुछ करते हैं उसे देखकर आपको काफ़ी असहज लग सकता है
    • JAX भी एक tracing compiler है
      बेशक, मुझे पता है कि इसका problem space TraceMonkey या LuaJIT से बेहद अलग है
    • TraceMonkey paper मेरी PhD qualifying exam reading list में था, और संयोग से वही exam का समय TraceMonkey के SpiderMonkey से हटाए जाने के समय से मिला
      मैंने उस समय के एक developer से बात की थी, शायद Jason Orendorff, और उनका कहना था कि tracing ठीक से काम नहीं कर पाता, हालाँकि सीमित परिस्थितियों में यह संभव हो सकता है
      लेकिन वे परिस्थितियाँ क्या थीं, यह मैं पूरी तरह भूल चुका हूँ
    • trace compilation dead end नहीं है
      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 में होने चाहिए

    • course numbering काफ़ी नियमित है, इसलिए यह पता लगाया जा सकता है कि “intro compiler” course कौन-सा है: https://www.cs.cornell.edu/courses/cs4120/2026sp/?schedule
      संक्षेप में, compiler असल में दो courses में बँटा है, और पहला course compiler बनाने के लिए न्यूनतम ज़रूरी चीज़ों—lexical analysis, parsing, code generation, और register allocation—को cover करता है
      दूसरा course optimizing compiler बनाने के तरीक़े पर है
    • मैंने इस विषय पर बहुत सारा material पढ़ा है, लेकिन उनमें से ज़्यादातर में ऐसा content शामिल नहीं था
      वास्तव में, चाहे compiler हो या interpreter, backend लगभग हमेशा “reader के लिए exercise” बनकर रह जाता है
      closures कैसे बनाएँ, environment को कैसे track करें, pattern matching, memory representation—ऐसी कितनी चीज़ें हैं जिन्हें अभी भी समझना बाकी है, इसका अंदाज़ा लगाना मुश्किल है
      सारी दिलचस्प चीज़ें ख़ुद ही खोजनी पड़ती हैं
      प.स.: यह तो बस एक साल की सामग्री है: https://gist.githubusercontent.com/mamcx/e1743571b9a1ea163a7...
    • मेरा मानना है कि non-specialists अक्सर parsing से शुरू करते हैं और backend तक पहुँच ही नहीं पाते
      मैंने interpreter और compiler पर दो किताबें पढ़ी हैं, और उनमें backend पर ज़्यादा चर्चा नहीं थी
      शायद यह backend की intro class के क़रीब हो सकता है
    • तब मैं सोचता हूँ कि इसमें advanced क्या है। अगर dead code elimination, data flow, SSA, instruction selection, और register allocation को ठीक से cover कर लिया जाए, तो वह लगभग backend का 98% है
  • क्या इस तरह के और self-guided online university-level computer science courses हैं?

    • दर्जनों हैं। बस “mooc” खोजिए
      कुछ professors “mooc” framework के बाहर भी lectures और assignments public करते हैं
      जब मैंने comments में सवाल पूछा था, तो एक professor ने जवाब भी दिया था। इंटरनेट कभी-कभी अब भी काफ़ी शानदार लगता है
  • Nora Sandler की Writing a C compiler की तुलना में, पाठक को क्या अलग फ़ायदा मिलेगा?

    • वह किताब undergraduate स्तर के compiler course से मिलने वाली सामग्री के ज़्यादा क़रीब है, जबकि यह course उससे ज़्यादा advanced content cover करता है
      अगर आप beginner हैं या शौकिया तौर पर इसमें उतर रहे हैं, तो बेहतर होगा कि पहले उस किताब या उसी स्तर की सामग्री से शुरुआत करें, फिर इस course को आज़माते हुए अपनी कमियाँ भरें
  • क्या उन्नत स्तर पर जाने से पहले देखने लायक कोई बेसिक compiler self-paced course भी है?

    • मुझे Essentials of Compilation [1][2] और Writing a C Compiler [3] की संरचना पसंद है
      अगर आप 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 में इस्तेमाल किया जा सकता है
    • Crafting Interpreters [1] देखने की सिफारिश करूँगा
      यह दो हिस्सों में है, और पहला हिस्सा Java में tree-walk interpreter बनाता है, फिर C में लिखे गए version तक आगे बढ़ता है
      1. https://craftinginterpreters.com/
    • मैंने खुद इसे नहीं किया है, लेकिन “the-super-tiny-compiler” है:
      https://github.com/jamiebuilds/the-super-tiny-compiler
    • पुरानी है, लेकिन classic David Gries की Compiler Construction for Digital Computers से शुरुआत करने की सिफारिश करूँगा
      यहाँ सुझाई गई कुछ आधुनिक किताबों के साथ इसे पढ़ें तो काफ़ी होगा
      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 शामिल होता है

    • मैंने ऐसा कभी नहीं सुना, और मुझे पूरा यक़ीन है कि यह लगभग निश्चित रूप से ग़लत है। हाँ, “machine learning” शब्द काफ़ी व्यापक है
      क्या इसके लिए कोई source है?
  • मुझे सच में जिज्ञासा है कि alexia massalin आजकल microunity patent royalty लेने के अलावा और क्या कर रही हैं