प्रोग्रामिंग भाषा इंटरप्रेटर बनाना
(craftinginterpreters.com)- प्रोग्रामिंग भाषा डिज़ाइन और इम्प्लीमेंटेशन को सीधे सीखते हुए, एक पूरी स्क्रिप्टिंग भाषा बनाने की प्रक्रिया पर आधारित किताब
- पार्सिंग, सेमांटिक्स, बाइटकोड, गार्बेज कलेक्शन जैसे हाई-लेवल कॉन्सेप्ट्स से लेकर लो-लेवल इम्प्लीमेंटेशन तक चरणबद्ध व्याख्या
main()फ़ंक्शन से शुरू करके डायनेमिक टाइपिंग, लेक्सिकल स्कोप, फर्स्ट-क्लास फ़ंक्शंस, क्लासेस, इनहेरिटेंस शामिल करने वाली भाषा को स्वयं लिखना- प्रिंट, eBook, PDF, वेब संस्करण सहित 4 फ़ॉर्मैट्स में उपलब्ध, और वेब पर पूरा कंटेंट मुफ्त में पढ़ा जा सकता है
- Google के Dart भाषा डेवलपर Robert Nystrom द्वारा लिखित, भाषा निर्माण में रुचि रखने वाले डेवलपर्स के लिए एक महत्वपूर्ण व्यावहारिक शिक्षण संसाधन
किताब का परिचय
- Crafting Interpreters एक पूर्ण-विशेषताओं वाली कुशल स्क्रिप्टिंग भाषा को स्वयं इम्प्लीमेंट करने का तरीका बताने वाली किताब है
- इसमें पार्सिंग और सेमांटिक्स जैसे हाई-लेवल कॉन्सेप्ट्स के साथ बाइटकोड रिप्रेज़ेंटेशन और गार्बेज कलेक्शन जैसी लो-लेवल इम्प्लीमेंटेशन डिटेल्स भी शामिल हैं
- इसे इस तरह बनाया गया है कि पाठक स्वयं कोड लिखकर भाषा की संरचना को पूरी तरह समझ सके
- अंत में बनने वाली भाषा समृद्ध ग्रामर, डायनेमिक टाइपिंग, गार्बेज कलेक्शन, लेक्सिकल स्कोप, फर्स्ट-क्लास फ़ंक्शंस, क्लोज़र्स, क्लासेस, इनहेरिटेंस को सपोर्ट करती है
- यह संक्षिप्त और तेज़ कोड की हज़ारों लाइनों से बनी है, और सारा कोड पाठक खुद लिखता है
उपलब्ध फ़ॉर्मैट्स
- यह किताब Print, eBook, PDF, Web इन चार फ़ॉर्मैट्स में उपलब्ध है
- Print: 640 पेज, हाई-रेज़ोल्यूशन हाथ से बने इलस्ट्रेशन और बारीक टाइपोग्राफी सहित
- eBook: CSS डिवाइस की स्क्रीन साइज़ के अनुसार एडजस्ट होती है, और कलर सिंटैक्स हाइलाइटिंग व हाइपरलिंक्स सपोर्ट करती है
- PDF: प्रिंट संस्करण की लेआउट और इलस्ट्रेशन को उसी रूप में दोहराते हुए बेहतर पोर्टेबिलिटी देता है
- Web: रिस्पॉन्सिव डिज़ाइन के साथ सभी अध्याय और इलस्ट्रेशन शामिल, पूरा कंटेंट मुफ्त में उपलब्ध
लेखक परिचय
- लेखक Robert Nystrom Google में Dart भाषा विकास पर काम कर रहे हैं
- इससे पहले Electronic Arts में 8 साल तक गेम डेवलपमेंट किया
- वे बेस्टसेलर Game Programming Patterns के लेखक हैं, और वह किताब भी मुफ्त में उपलब्ध है
- भाषा निर्माण के प्रति गहरी रुचि के चलते उन्होंने कई हॉबी लैंग्वेज प्रोजेक्ट्स (Wren, Magpie, Finch, Vigil) विकसित किए
- वे अपने व्यक्तिगत ब्लॉग और ट्विटर(
@munificentbob) के माध्यम से सक्रिय हैं, और अपनी किताब से जुड़ी मेलिंग लिस्ट भी चलाते हैं
पहुँच और खरीदने के विकल्प
- प्रिंट संस्करण Amazon, Barnes & Noble, Book Depository जैसे प्रमुख बुकस्टोर्स से खरीदा जा सकता है
- eBook Kindle, Apple Books, Google Play Books, Smashwords आदि पर उपलब्ध है
- PDF संस्करण Payhip पर खरीदा जा सकता है, और मुफ्त सैंपल PDF डाउनलोड भी उपलब्ध है
- वेब संस्करण आधिकारिक साइट पर पूरा मुफ्त पढ़ने के लिए उपलब्ध है
1 टिप्पणियां
Hacker News की राय
इसकी बदौलत मैंने class hierarchy inheritance की वह अवधारणा भी पूरी तरह समझ ली, जिसमें visitor की ज़रूरत नहीं पड़ती
Newspeak भाषा में class के अंदर nested classes रखी जा सकती हैं, इसलिए inheritance के समय वे nested classes भी साथ में inherit हो जाती हैं
यह सुविधा Free Object Algebras को संभव बनाती है, इस पर इस ब्लॉग पोस्ट में चर्चा की गई है
संदर्भ: Expression Problem लेख, Newspeak आधिकारिक साइट
2020 में इसे 777 points मिले थे, और 2024 में 607 points
क्योंकि इसमें अलग-अलग language features और patterns को खुद implement करते हुए सीखना पड़ता है
जिन भाषाओं में Java जैसी सुविधाएँ नहीं थीं, उनमें मिलते-जुलते patterns लागू करना कठिन था, लेकिन वही चुनौती अपने आप में मज़ेदार थी
लेखक की casual writing style और जगह-जगह का humor मुझे बहुत पसंद आया
उम्मीद है कि “Lox में type checker जोड़ना” जैसी कोई अगली कड़ी आए
मैंने पहले इसका paperback खरीदा था, लेकिन वह इतना बड़ा और भारी था कि आखिरकार ebook फिर से खरीदनी पड़ी
notes बनाना और search करना कहीं ज़्यादा सुविधाजनक है
फिर भी इसे पढ़ते-पढ़ते कभी-कभी ऐसा लगता है जैसे पहाड़ों में रास्ता भटक गए हों :)
लेखक की दूसरी किताब Game Programming Patterns भी सुझाऊँगा
किसी print shop में यह आसानी से हो जाता है, और मेज़ पर संभालना कहीं आसान हो जाता है
लेकिन Crafting Interpreters ऐसी किताब है जिसे मैं कभी फेंक नहीं सकता, इसलिए उसे वैसे ही रखा है
इतनी शानदार किताब है यह
ऊपर से इसका web version मुफ़्त होना बहुत उदार बात है
बस अफ़सोस है कि इसका Java version पुराना हो चुका है
अच्छा होता अगर sealed classes या exhaustive switch जैसी हाल की सुविधाओं को शामिल करते हुए इसका revised edition आता
ऐसा करने पर लेखक का बनाया हुआ अस्थायी code generation tool भी ज़रूरी नहीं रहेगा
PEG-based parser में context stack जोड़ने जैसा एक hacky तरीका है, लेकिन syntax switching की समस्या फिर भी कठिन बनी रहती है
लगता है persistent data structure या transactional data structure मदद कर सकते हैं, लेकिन अभी तक इसका कोई स्पष्ट formalization नहीं मिला
इसमें parser lexer को state देता है, ताकि lexer type names के set को जान सके
उदाहरण के लिए Parsec जैसी लाइब्रेरी में ‘do’ notation का उपयोग करके हर चरण का परिणाम आगे आने वाले parsers के साथ साझा किया जा सकता है
अच्छी बात यह है कि Rust या Go ने इन समस्याओं से बचाव किया है, और सावधानीपूर्वक design से इन्हें पूरी तरह टाला जा सकता है
shi project और, अगर C language की तरफ़ रुचि हो, तो hacktical-c देखना अच्छा रहेगा