- 1988~1995 के बीच प्रकाशित Jack Crenshaw की ‘Let’s Build a Compiler’ ट्यूटोरियल को Python और WebAssembly के साथ फिर से बनाया गया एक प्रोजेक्ट
- मूल रूप में Pascal और Motorola 68000 Assembly का उपयोग होता था, लेकिन इस बार कोड को आधुनिक वातावरण में रन करने योग्य रूप में बदल दिया गया
- ट्यूटोरियल का मुख्य फोकस recursive-descent parser को खुद implement करना और शुरुआती चरण से ही वास्तविक assembly code generate करने की approach पर था
- Crenshaw का तरीका syntax-directed translation का उपयोग करता है, लेकिन type handling चरण में सीमाएँ दिखाता है
- इस पुनर्निर्माण का महत्व इस बात में है कि क्लासिक ट्यूटोरियल को आधुनिक डेवलपर्स के लिए सीधे रन करके experiment करने योग्य रूप में पुनर्जीवित किया गया है
क्लासिक ट्यूटोरियल का संदर्भ
- Jack Crenshaw की ‘Let’s Build a Compiler’ 1988~1995 के बीच जारी की गई एक compiler निर्माण परिचय पुस्तिका है, जिसे आज भी अक्सर reference के रूप में लिया जाता है
- original संस्करण Pascal में लिखा गया था और इसमें Motorola 68000 Assembly code output होता था
- 35 साल बाद 2025 में भी Hacker News जैसे प्लेटफॉर्म पर यह लगातार चर्चा में बनी रही
- लेखक ने पहली बार इस ट्यूटोरियल को 2003 में पढ़ा था और उस समय से प्रभावित रहे; 2025 में उन्होंने इसे Python और WebAssembly में port किया
Python और WebAssembly में पुनर्निर्माण
- केवल पढ़ने तक सीमित न रहकर, लेखक ने tutorial compiler को Python में port किया और output को WebAssembly (WASM) के रूप में generate करने के लिए implement किया
- परिणाम सार्वजनिक GitHub repo में उपलब्ध है: eliben/letsbuildacompiler
TUTORIAL.md में बताया गया है कि original के हर भाग को Python code में कैसे map किया गया है
- उपयोगकर्ता original ट्यूटोरियल पढ़ते हुए directly executable code के साथ experiments कर सकता है
KISS भाषा उदाहरण और WASM output
- Crenshaw द्वारा डिज़ाइन की गई KISS भाषा के sample program को Python version compiler से compile करने का परिणाम दिखाया गया है
- उदाहरण में
procedure, while loop, तथा value passing और reference passing शामिल हैं
- निकलने वाली WASM text में by-reference parameter हैंडल करने वाली logic मौजूद है, जबकि optimization लगभग नहीं है
- ग्लोबल variable
X का main से implicit return होना testing convenience के लिए जोड़ा गया हिस्सा है
- generated WASM code का उपयोग वास्तविक रन के जरिए expected परिणाम validate करने वाले tests में किया गया
ट्यूटोरियल की ताकत
- Crenshaw का ट्यूटोरियल चरण-दर-चरण recursive-descent parser बनाते हुए चलता है और जटिल theory की बजाय काम करने वाला code generation दिखाने पर केंद्रित रहता है
- उस समय
lex और yacc मानक माने जाते थे, लेकिन हाथ से लिखे गए parser की simplicity और clarity का असर बहुत बड़ा था
- बाद के 20 सालों में लेखक का झुकाव manual recursive-descent parsing की तरफ हो गया
- साथ ही जब अधिकतर lectures parsing पर फोकस करते थे, Crenshaw ने शुरुआती स्तर से ही assembly code generation शामिल किया
सीमाएँ और सुधार की संभावनाएँ
- ट्यूटोरियल syntax-directed translation के तरीके से parsing के दौरान सीधे code generate करता है
- यह सीखने के लिए उपयोगी है, पर type जानकारी पहले से नहीं होने के कारण optimization करना कठिन हो जाता है
- खासकर type introduction के बाद, यानी part 14 के बाद, IR या AST जैसे structured तरीके की जरूरत साफ दिखने लगती है
- Crenshaw ने part 14 के बाद tutorial क्यों बंद किया, यह स्पष्ट नहीं है, लेकिन संभवतः इन सीमाओं से इसका संबंध रहा होगा
- लेखक के अनुसार part 14 को turning point मानकर पहले AST बनाना, फिर type checking और code generation करना बेहतर होता
निष्कर्ष
- मूल ट्यूटोरियल आज भी compiler निर्माण परिचय पुस्तिका के रूप में पढ़ने में सरलता और व्यवहारिकता के साथ मजबूत बना हुआ है
- यह Python·WASM संस्करण आधुनिक डेवलपर्स को पुरानी तकनीकों पर निर्भर हुए बिना सीखने के लिए एक बेहतर रूप देता है
- GitHub repo के माध्यम से कोई भी इसे आसान प्रयोग के लिए चला सकता है, और इसे compiler structure को hands-on तरीके से समझने वाली आधुनिक reinterpretation के रूप में देखा जा सकता है
अभी कोई टिप्पणी नहीं है.