अपना खुद का रेट्रो कंपाइलर विकसित करें
(t3x.org)- 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
- पुस्तक का सारा code public domain में है
- paperback ऑर्डर करें
- PDF प्रति ऑर्डर करें
- table of contents PDF
- sample pages PDF
- source download
- code page
1 टिप्पणियां
Hacker News की राय
अभी-अभी एक नई compiler किताब निकाली है। यह “Write Your Own Compiler” के विस्तारित संस्करण जैसी है, और इस बार आधुनिक सिस्टम के ELF की बजाय Z80 के लिए CP/M code generation को कवर करती है, इसलिए कई हिस्से काफी सरल हो गए हैं
4MHz Z80 सिस्टम पर 10 मिनट के अंदर खुद को compile करने वाला compiler बनाने के लिए कितनी complexity चाहिए, यह देखा जा सकता है। code मुफ्त है, लेकिन किताब paid है
साथ ही Forth पर एक बिना फालतू बातों वाली किताब और Nils-शैली की व्याख्या भी देखना चाहूंगा
हाल ही में ऐसे पुराने x86 CPU के लिए C multi-pass compiler और assembler TypeScript में बनाया
https://github.com/Mati365/ts-c-compiler
मेरे पास 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 लिखने से भी कठिन हो सकता है
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/
अगर 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
जब कोई चीज़ “जादू” जैसी लगती है, तो मैं इसे इस संकेत की तरह लेता हूं कि किसी ने जिसे लोग सीमा मानते थे, उसे चतुराई से bypass किया है। हाल में मैं fake bass के बारे में पढ़ रहा हूं, जिसमें छोटे speakers असल में जितनी bass निकाल सकते हैं उससे ज्यादा बड़ी bass निकालते हुए लगते हैं; harmonics का इस्तेमाल करके दिमाग को असल से भी lower note सुनने जैसा भ्रम देना दिलचस्प है
दिलचस्प दिखता है, लेकिन downside यह है कि reader को पहले नई programming language T3X जाननी या सीखनी होगी
यह भी उत्सुकता है कि बाहरी दुनिया से connection सिर्फ keyboard और screen रखने वाले retro CP/M system पर शुरू से compiler लिखा और develop किया जा सकता है या नहीं
SubC 3815 lines का है और T3X/0 2330 lines का
बेशक external tools के बिना CP/M पर शुरू किया जा सकता है, लेकिन तब bootstrap compiler assembly language में लिखना होगा। इसमें बहुत समय लगेगा, लेकिन यह पूरी तरह संभव है। बस यह पढ़ने में दिलचस्प होगा या नहीं, इस पर संदेह है
C-style syntax की बजाय ALGOL-style syntax इस्तेमाल करना थोड़ा अप्रत्याशित है, लेकिन यह मेरा bias हो सकता है। दिमाग में
DOऔरENDको{और}से map करना कोई बड़ा बोझ नहीं हैlexical analysis और parsing चरणों से आगे जाने वाला compiler tutorial — शायद लगभग पहला ही होगा
मज़ाक कर रहा हूं, लेकिन सच में कई resources वहीं रुक जाते हैं। इसे खरीदने का सोच रहा हूं
अपनी खुद की CP/M जैसी operating system लिखने पर भी कोई किताब हो तो मज़ा आएगा
बेशक यह 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 बेहतर हो सकती है
इसलिए 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...