3 पॉइंट द्वारा GN⁺ 2023-12-11 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Write Your Own Retro Compiler एक 339-पृष्ठ की पुस्तक है, जिसमें पूरे source code के साथ एक self-hosting compiler पर चर्चा की गई है, जो Z80-आधारित CP/M पर चलता है और उसी environment के लिए code generate करता है
  • जिस T3X/0 को implement किया गया है, वह Pascal और BCPL से प्रेरित एक सरल भाषा है, और पुस्तक में उसका 20-पृष्ठ का पूरा manual शामिल है
  • procedural language जैसे C या Pascal और assembly language का ज्ञान आवश्यक है, और Z80 assembly तथा CP/M की बुनियादी जानकारी हो तो इसे समझना आसान है
  • lexical analysis, parsing, code generation, simple optimization, BDOS interface और runtime library को diagram, table और example के साथ समझाया गया है
  • सारा code public domain में उपलब्ध है, और साथ में paperback·PDF खरीद लिंक, table of contents, sample pages और source download भी दिए गए हैं

पुस्तक का दायरा और लक्षित पाठक

  • Write Your Own Retro Compiler 2023 में Lulu Press से प्रकाशित 339-पृष्ठ की, 91 चित्रों वाली, 6" x 9" आकार की पुस्तक है
  • इसका मुख्य विषय एक self-hosting compiler है, जो Z80 processor के CP/M पर चलता है और उसी environment को target करके code generate करता है
  • इसे इस तरह बनाया गया है कि compiler development का अनुभव न होने पर भी पाठक इसे follow कर सकें
  • implementation language T3X/0, Pascal और BCPL से प्रेरित एक सरल भाषा है
  • पुस्तक में T3X/0 के लिए 20-पृष्ठ का पूरा manual शामिल है

आवश्यक ज्ञान

  • कम से कम एक procedural programming language का ज्ञान होना चाहिए
    • उदाहरण के तौर पर C और Pascal का उल्लेख है
  • assembly language में भी कम से कम एक का ज्ञान होना चाहिए, और आदर्श रूप से Z80 CPU के लिए assembly का ज्ञान अपेक्षित है
  • CP/M operating system की बुनियादी जानकारी भी आवश्यक है
  • स्वयं सीखने वाले पाठकों के लिए Z80 assembly language का एक संक्षिप्त परिचय भी शामिल है

कंपाइलर के घटक

  • compiler के अंदरूनी कामकाज को कई diagram, table और example के जरिए समझाया गया है
  • शामिल विषय इस प्रकार हैं
    • lexical analysis
    • parsing
    • code generation
    • simple optimization
    • BDOS interface

      • runtime library

दिए गए लिंक और code

1 टिप्पणियां

 
GN⁺ 2023-12-11
Hacker News की राय
  • अभी-अभी एक नई compiler किताब निकाली है। यह “Write Your Own Compiler” के विस्तारित संस्करण जैसी है, और इस बार आधुनिक सिस्टम के ELF की बजाय Z80 के लिए CP/M code generation को कवर करती है, इसलिए कई हिस्से काफी सरल हो गए हैं
    4MHz Z80 सिस्टम पर 10 मिनट के अंदर खुद को compile करने वाला compiler बनाने के लिए कितनी complexity चाहिए, यह देखा जा सकता है। code मुफ्त है, लेकिन किताब paid है

    • Nils क्या बना रहे हैं, इसका हमेशा इंतज़ार रहता है। उम्मीद है वे इस काम को business के तौर पर भी लाभदायक तरीके से कर पा रहे होंगे, और किसी दिन सब खरीदकर follow करना चाहूंगा
      साथ ही Forth पर एक बिना फालतू बातों वाली किताब और Nils-शैली की व्याख्या भी देखना चाहूंगा
  • हाल ही में ऐसे पुराने x86 CPU के लिए C multi-pass compiler और assembler TypeScript में बनाया
    https://github.com/Mati365/ts-c-compiler

    • किताब का compiler थोड़ा और पुराने Z80 के लिए है, जिसमें multiplication या division instruction तक नहीं है। फिर भी यह compiler 8086 और 386 के लिए code भी output कर सकता है
  • मेरे पास Practical Compiler Construction का दूसरा edition physical book के रूप में है, और मुझे काफी पसंद है। दिलचस्पी रखने वालों को Nils की किताबें recommend करूंगा

  • यह किताब मज़ेदार लगती है। हालांकि मैं अब भी The Dragon Book के किसी सही successor का इंतज़ार कर रहा हूं
    ऐसी किताब अच्छी होगी जो modern CPU और हो सके तो GPU optimization तक कवर करे, और तेज़ concurrent garbage collector वाले modern virtual machine को design और write करने का तरीका भी बताए। कुछ मायनों में यह compiler लिखने से भी कठिन हो सकता है

    • Bob Morgan की Building an Optimizing Compiler modern compiler optimization पर पूरी तरह केंद्रित किताब है और 1997 में प्रकाशित हुई थी
      control flow graph बनाना, उस पर संभव विभिन्न optimizations, alias analysis, static single assignment form, CFG dominator-based optimization, instruction scheduling, register allocation, object code generation तक कवर करती है। ज्यादातर compiler किताबों की तरह lexical analysis, parsing, NFA/DFA जैसी चीजें नहीं कवर करती
      advanced analysis की जरूरत वाले optimizing compiler बनाने वालों के लिए Static Program Analysis भी मददगार हो सकती है: https://cs.au.dk/~amoeller/spa/
      garbage collection के लिए Garbage Collection handbook है: https://gchandbook.org/
    • छात्र रहते हुए मुझे The Dragon Book खास पसंद नहीं आई थी, ऐसा याद है। कारण अब ठीक से याद नहीं, लेकिन शायद लगा था कि structure अच्छा नहीं है; कुछ topics पर जरूरत से ज्यादा detail है, जबकि कुछ topics की explanation कम है
      अगर basic knowledge कुछ हद तक है, तो यह course पसंद आ सकता है: https://www.cs.cmu.edu/~janh/courses/411/18/schedule.html
      खास तौर पर SSA form introduce करने का तरीका अच्छा लगा
      ज्यादा advanced topics यहां हैं: https://www.cs.cmu.edu/~15745/handouts.html
    • मैं भी ऐसी किताब की उम्मीद करता रहा हूं। आजकल modern microcode/firmware जैसी चीजों की वजह से यह बहुत जटिल हो गया है, और बहुत कुछ जादू जैसा लगता है
      जब कोई चीज़ “जादू” जैसी लगती है, तो मैं इसे इस संकेत की तरह लेता हूं कि किसी ने जिसे लोग सीमा मानते थे, उसे चतुराई से bypass किया है। हाल में मैं fake bass के बारे में पढ़ रहा हूं, जिसमें छोटे speakers असल में जितनी bass निकाल सकते हैं उससे ज्यादा बड़ी bass निकालते हुए लगते हैं; harmonics का इस्तेमाल करके दिमाग को असल से भी lower note सुनने जैसा भ्रम देना दिलचस्प है
  • दिलचस्प दिखता है, लेकिन downside यह है कि reader को पहले नई programming language T3X जाननी या सीखनी होगी
    यह भी उत्सुकता है कि बाहरी दुनिया से connection सिर्फ keyboard और screen रखने वाले retro CP/M system पर शुरू से compiler लिखा और develop किया जा सकता है या नहीं

    • किताब लिखने से पहले इस हिस्से पर काफी सोचा था। आखिरकार T3X चुनने की वजह यह थी कि इसका compiler सबसे छोटे C subset compiler से काफी छोटा है, और निजी तौर पर मुझे T3X सीखने और समझने में आसान लगता है
      SubC 3815 lines का है और T3X/0 2330 lines का
      बेशक external tools के बिना CP/M पर शुरू किया जा सकता है, लेकिन तब bootstrap compiler assembly language में लिखना होगा। इसमें बहुत समय लगेगा, लेकिन यह पूरी तरह संभव है। बस यह पढ़ने में दिलचस्प होगा या नहीं, इस पर संदेह है
    • यह downside नहीं लगता। जो व्यक्ति compiler लिखना चाहता है, उसके लिए नई programming language संभवतः बड़ी बाधा नहीं होगी, और एक simple व साफ-सुथरी toy language educational purpose के लिए बेहतर हो सकती है
      C-style syntax की बजाय ALGOL-style syntax इस्तेमाल करना थोड़ा अप्रत्याशित है, लेकिन यह मेरा bias हो सकता है। दिमाग में DO और END को { और } से map करना कोई बड़ा बोझ नहीं है
  • lexical analysis और parsing चरणों से आगे जाने वाला compiler tutorial — शायद लगभग पहला ही होगा
    मज़ाक कर रहा हूं, लेकिन सच में कई resources वहीं रुक जाते हैं। इसे खरीदने का सोच रहा हूं

  • अपनी खुद की CP/M जैसी operating system लिखने पर भी कोई किताब हो तो मज़ा आएगा

    • वह Andrew Tanenbaum की Operating Systems Design and Implementation है
      बेशक यह Unix-style microkernel operating system बनाने का तरीका दिखाती है, लेकिन file system chapter छोड़कर सब skip कर सकते हैं। और tree data structure वाली सलाह न मानें, सिर्फ flat tables इस्तेमाल करें, और accurate file size implementation की भी चिंता न करें। तब वह CP/M बन जाता है
      निजी तौर पर मैं दूसरा edition पसंद करता हूं। तीसरा edition मुझे लगता है demo Minix code को 1980s PC की बजाय late-1990s PC पर चलाने के लिए अनावश्यक रूप से जटिल बना दिया गया था
  • नकारात्मक रूप से नहीं कह रहा, बस एक observation है जो मददगार हो सकता है
    free chapters पढ़े, और लगा कि जिन लोगों को subject knowledge ज्यादा नहीं है उनके लिए कुछ हिस्से मुश्किल हो सकते हैं। हर title के नीचे “language की grammar क्या होती है...” जैसे concepts शुरुआत से समझाए जाते हैं, लेकिन कुछ ही sentences बाद assembly instructions जैसे advanced topics बिना explanation के आ जाते हैं
    अगर reader grammar का मतलब सीखने के स्तर पर है, तो अगले ही sentences समझना कठिन हो सकता है। इसलिए consistency थोड़ी बढ़ाई जाए तो किताब की overall quality बेहतर हो सकती है

    • किताब के introduction में भी लिखा है कि compiler construction की prior knowledge जरूरी नहीं है, लेकिन माना था कि reader कम से कम एक procedural language और एक assembly language से familiar होना चाहिए
      इसलिए assembly instructions जैसी चीजों को reader जानता है, ऐसा assume करना ठीक लगा
      किताब के appendix में Z80 assembly का छोटा introduction भी है, लेकिन वह भी assembly language की basics पता होने का assumption करता है
      हर किताब को कहीं न कहीं से शुरू करना होता है। यह मानकर compiler construction की किताब लिखना कठिन है कि computer programming का कोई ज्ञान ही नहीं है। फिर भी इसका मतलब यह नहीं कि curse of knowledge नहीं हो सकता, इसलिए इस बात को जरूर ध्यान में रखूंगा
  • actual book content से अलग, इसका बिल्कुल फिट बैठता retro और minimal web design भी पसंद आया
    nostalgia खूब trigger करता है। desk पर “HTML 3.2 UNLEASHED!!!!” जैसे title वाली 6-inch मोटी किताब रखकर खुद site बनाने की अच्छी यादें आ गईं

    • वे अच्छे दिन थे
      हालांकि करीब 1500 static pages पर global change apply करने लगें तो मज़ा खत्म हो जाता है। अभी pain इतना बड़ा नहीं है कि अपना CMS बनाना पड़े, लेकिन अगर बनाऊंगा भी तो design वही रखूंगा
  • https://web.archive.org/web/20231210141834/http://t3x.org/t3...