इंटरप्रेटर बनाने की तकनीक
(craftinginterpreters.com)- Crafting Interpreters ऐसी किताब है जिसे इस तरह बनाया गया है कि जो पाठक खुद एक भाषा बनाना चाहते हैं, वे एक पूर्ण scripting language implementation को शुरू से अंत तक फ़ॉलो कर सकें
- यह parsing और semantics जैसे language design concepts से लेकर bytecode representation और garbage collection जैसी runtime implementation तक सब कुछ एक ही प्रवाह में कवर करती है
- पाठक
main()से शुरू करके dynamic typing, lexical scope, first-class functions, closures, classes और inheritance वाली एक भाषा खुद implement करते हैं - यह आपको कुछ हज़ार लाइनों के साफ़ और तेज़ code को पूरी तरह खुद लिखवाती है, ताकि तैयार नतीजे से ज़्यादा अंदरूनी कामकाज की समझ पर ध्यान रहे
- यह print, eBook, PDF और web फ़ॉर्मैट में उपलब्ध है, और web पर सभी chapters, supplementary लेख और illustrations मुफ़्त में पढ़े जा सकते हैं
किताब का implementation scope
- Crafting Interpreters उन पाठकों के लिए है जो अपनी खुद की programming language बनाना चाहते हैं, या यह समझना चाहते हैं कि भाषाएँ कैसे design और implement की जाती हैं
- किताब full-featured scripting language को implement करने के लिए ज़रूरी मुख्य विषयों को साथ लेकर चलती है
- parsing
- semantics
- bytecode representation
- garbage collection
- implementation
main()से शुरू होता है और अंत में नीचे दिए गए features वाली भाषा तक विस्तार पाता है- समृद्ध grammar
- dynamic typing
- lexical scope
- first-class functions
- closures
- classes
- inheritance
पढ़ने का तरीका और परिणाम
- पाठक example code को सिर्फ़ देखते नहीं, बल्कि हर line खुद लिखते हुए language processor की internal structure को समझते हैं
- अंतिम code कुछ हज़ार लाइनों का होता है और इसका लक्ष्य साफ़ और तेज़ implementation है
- ऊपरी स्तर के concepts और low-level implementation को अलग-अलग समझाने के बजाय, यह एक ही भाषा को पूरा करने की प्रक्रिया में दोनों को साथ समझने के लिए डिज़ाइन की गई है
उपलब्ध फ़ॉर्मैट
-
print
- यह 640 पेज का print संस्करण है, जिसमें high-resolution hand-drawn illustrations और लेखक द्वारा खुद typeset की गई typography दी गई है
- Amazon.com
- Barnes and Noble
- Download Sample PDF
-
eBook
- इसमें e-reader और अलग-अलग screen sizes के अनुसार CSS, full-color syntax highlighting और live hyperlinks दिए गए हैं
- Kindle Amazon.com
- Apple Books
- Play Books Google
- Nook B&N
- EPUB Smashwords
-
PDF
- यह print संस्करण की hand-crafted typesetting और स्पष्ट illustrations को बनाए रखते हुए आसानी से साथ ले जाने योग्य रूप में उपलब्ध है
- Buy from Payhip
- Download Free Sample
-
web
- यह desktop से मोबाइल तक responsive design में उपलब्ध है, और सभी chapters, supplementary लेख और illustrations मुफ़्त में पढ़े जा सकते हैं
- Read Now
1 टिप्पणियां
Hacker News की राय
मैं लेखक हूँ। मेरी किताब पर इतनी सकारात्मक प्रतिक्रिया देखकर सच में दिल खुश हो गया। इसमें बहुत समय और लगाव लगाया था, और यह देखकर बहुत संतोष है कि इसका वही असर हुआ जिसकी उम्मीद थी
इस resource की वजह से मेरा confidence बहुत बढ़ा, और आज भी मैं उस project को अपने सबसे पसंदीदा कामों में से एक मानता हूँ
यह भी जानना चाहूँगा कि क्या Lox के लिए compiler या JIT जैसी कोई follow-up किताब लिखने का विचार है। और lexical analygator तो कमाल है—कंपनी की internal presentations में source के साथ कई बार दिख चुका है, और एक समय whiteboard fan art भी था
कभी-कभी लगता है कि कुछ authors को दिखाना पड़ता है कि यह पूरा क्षेत्र black magic है; हालांकि शायद GoF design patterns समझने के लिए मैं ही कम था
Crumb(https://github.com/liam-ilan/crumb) बनाते समय मैंने Crafting Interpreters पढ़ी थी, और खासकर scope और local variables वाले हिस्से बेहद ज़रूरी थे
technical implementation और conceptual insight का balance अच्छा है, इसलिए किताब के तय रास्ते से हटकर कुछ करने की कोशिश करते समय भी बहुत मदद मिलती है। ऐसी technical writing अपने आप में लक्ष्य मानने लायक high-quality resource है
documentation भी अच्छी है और project भी शानदार है
इस किताब में मुझे सबसे अच्छी बात यह लगी कि यह उसी language के लिए दो अलग-अलग interpreters लिखवाती है
इससे programming language बनाने की process के ज्यादा जटिल और subtle हिस्सों को अच्छी तरह समझने में मदद मिलती है। किताब के पहले आधे भाग में बड़े ideas से पहले परिचय और familiarity हो जाती है, और जब दूसरे interpreter में वे फिर आते हैं तो रोचक हिस्से सच में absorb हो पाते हैं। सचमुच कमाल की किताब है
जब compiler resources की बात चल ही रही है, तो Immo Landwerth का C# में compiler बनाते हुए IL और debug symbols वगैरह generate करने वाला video series भी अच्छा लगा, हालांकि मैंने अभी पूरा नहीं देखा
यह करीब 5 साल पुराना resource है, इसलिए latest C# syntax नहीं है और शायद .NET Core 3 के आसपास के समय का है, लेकिन ज्यादातर कामों के लिए बड़ी समस्या नहीं होनी चाहिए। हाँ, nullable reference types से जुड़े warnings काफी आ सकते हैं
https://www.youtube.com/playlist?list=PLRAdsfhKI4OWNOSfS7EUu...
मुझे लगता है कि ज्यादातर programmers को कभी न कभी इस किताब को अंत तक follow करके देखना चाहिए। ऐसा करने पर समझ में बहुत बढ़ोतरी हुई कि compiler या language tools के अंदर असल में क्या होता है
मैंने अब तक जितने technical guides follow किए हैं, उनमें यह सबसे अच्छी तरह लिखे गए guides में से एक है, और concepts को अपना बनाने में बहुत मदद मिली। वे concepts सिर्फ compilers में नहीं, कई जगह काम आते हैं
इस किताब का एक secondary, लेकिन शायद उतना ही important फायदा यह है कि यह clarity सिखाती है
prose, code, structure और pacing—सब clear और focused हैं। “Crafting” शब्द बिल्कुल सही है; ऐसा लगता है जैसे किसी कारीगर ने कारीगरों के लिए किताब लिखी हो
मुझे लगता है कि programming language compiler journey में यह किताब दूसरा या तीसरा step होनी चाहिए
पहला step यह होना चाहिए कि interpreter या language design के बारे में कुछ न जानते हुए, अपनी बनाई किसी simple language के लिए खुद interpreter लिखकर देखा जाए। दूसरा step है उसे फिर से लिखना और गलतियाँ कम करना
ऐसा किए बिना इस topic की subtleties को ठीक से appreciate करना मुश्किल है, और जो concepts important नहीं दिखते उन्हें आसानी से नज़रअंदाज़ कर दिया जाता है
सारी techniques को शुरुआत से खुद reinvent करना ज़रूरी नहीं है। giants के shoulders पर खड़ा होना स्वाभाविक बात है
अगर मैंने पहले CI जैसी कोई चीज़ न पढ़ी होती, तो शायद खुद interpreter लिखने की कोशिश ही न करता, और third step तक नहीं पहुँचता
recursion नहीं था; stack में manually push और pop करता था। समस्या यह थी कि parsing को ठीक से समझता नहीं था, इसलिए language का ज्यादातर हिस्सा string.split और string.replace से implement किया, और जैसा expected था, ऐसे concepts बन गए जिन्हें nest नहीं किया जा सकता था। अफसोस है कि source code संभालकर नहीं रखा
कुछ ही दिनों में इतने bugs मिले कि मेरा approach थोड़ा ज्यादा academic हो गया और मैंने किताबें पढ़ना शुरू किया। फिर भी वह बेहतरीन first step था, क्योंकि ऐसी कोशिश न की होती तो शायद यह भी न पता चलता कि यह पूरा एक किताब-भर का topic है
ऐसे समर्पण वाले लोगों और development infra को बनाए रखने वाले सभी लोगों का मैं सचमुच सम्मान करता हूँ, लेकिन यह सोचकर राहत मिलती है कि मेरा “अपनी भाषा बनाना चाहता हूँ” वाला दौर थोड़ी-सी दिलचस्पी पर ही खत्म हो गया
काम की मात्रा सच में बहुत भारी है
जानना चाहता हूँ कि parameteric polymorphism और basic type inference जैसी चीज़ों वाली statically typed language बनाने के लिए कोई अच्छा resource है क्या
Crafting Interpreters में मुझे लगा था कि variable scope, functions, closures, classes और dynamic dispatch, control flow आदि सिखाने लायक लगभग सभी concepts को समेटने वाली एक छोटी और self-contained language बनाई जा सकती है
इसके उलट, type systems में design space के बहुत ज़्यादा मोड़ हैं और कोई साफ़ “best” रास्ता नहीं है। क्या subtyping है, generics erased होते हैं या reified, generic code compile time पर specialized होता है या नहीं, type inference local है या Hindley-Milner—ये सारे choices अलग-अलग मोड़ हैं
आप कोई भी choice लें, जिन branches को नहीं चुना उनके महत्वपूर्ण हिस्से छूट जाते हैं, और जो readers किसी दूसरे रास्ते की उम्मीद कर रहे थे उन्हें निराश किया जा सकता है। शायद Types and Programming Languages जैसी ज़्यादा व्यापक overview-style book सही हो, लेकिन फिर एक coherent चीज़ बनाते जाने का मज़ा खो जाता है
उसी किताब के C और Java editions भी हैं, लेकिन मेरी नज़र में वे कमज़ोर हैं। ML edition के साथ इस्तेमाल करना बेहतर रहेगा
मैंने देखा कि https://github.com/wh5a/Algorithm-W-Step-By-Step/blob/master... की implementation बहुत पुराने style की है, इसलिए उसे modernize और साफ़ करके https://gist.github.com/kccqzy/fa8a8ae12a198b41c6339e8a5c459... तक बनाया। उसके बाद मैंने जानबूझकर कई हिस्सों को “तोड़कर” देखा कि algorithm कैसे टूटता है
जिस computer science task को आप समझते हैं कि सिर्फ़ जादूगर ही कर सकते हैं, उसे approachable तरीके से करके देखने की मैं ज़ोरदार सलाह देता हूँ। एक-दो चीज़ें कर लेने के बाद समझ आता है कि मुश्किल तो है, लेकिन ज़्यादातर बस धक्का लगाते हुए आगे बढ़ने वाला काम है, और confidence बहुत बढ़ता है। जो लोग इस रास्ते पर जाना चाहते हैं, वे zellyn@(most things) पर contact कर सकते हैं
अभी-अभी part 2 खत्म किया है और यह सचमुच बहुत अच्छी किताब है। हर chapter के suggested exercises में से एक-दो खुद करके देखें तो content समझने में बहुत मदद मिलती है