3 पॉइंट द्वारा GN⁺ 2024-07-13 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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

  • PDF

    • यह print संस्करण की hand-crafted typesetting और स्पष्ट illustrations को बनाए रखते हुए आसानी से साथ ले जाने योग्य रूप में उपलब्ध है
    • Buy from Payhip
    • Download Free Sample
  • web

    • यह desktop से मोबाइल तक responsive design में उपलब्ध है, और सभी chapters, supplementary लेख और illustrations मुफ़्त में पढ़े जा सकते हैं
    • Read Now

1 टिप्पणियां

 
GN⁺ 2024-07-13
Hacker News की राय
  • मैं लेखक हूँ। मेरी किताब पर इतनी सकारात्मक प्रतिक्रिया देखकर सच में दिल खुश हो गया। इसमें बहुत समय और लगाव लगाया था, और यह देखकर बहुत संतोष है कि इसका वही असर हुआ जिसकी उम्मीद थी

    • मैं self-taught software engineer हूँ, और 21 साल की उम्र में ही programming शुरू की थी। पहली नौकरी में मुझे एक आसान query language और उसका interpreter बनाने का काम मिला। मुझे बिल्कुल नहीं पता था कि interpreter क्या होता है, लेकिन 2017 में यह किताब ऑनलाइन मिली और 3–4 दिनों में एक काम करने वाला prototype बना लिया, फिर 1–2 हफ्तों बाद असली product भी बना सका
      इस resource की वजह से मेरा confidence बहुत बढ़ा, और आज भी मैं उस project को अपने सबसे पसंदीदा कामों में से एक मानता हूँ
    • किताब लिखने के लिए धन्यवाद। मैं अभी भाग 1 लगभग खत्म करने वाला हूँ और सिर्फ मज़े के लिए Haskell में साथ-साथ implement कर रहा हूँ। हर chapter में मुझे एहसास होता है कि जो “smart trick” मैंने सोची थी, वह आगे की requirements के सामने उतनी smart नहीं निकली
      यह भी जानना चाहूँगा कि क्या Lox के लिए compiler या JIT जैसी कोई follow-up किताब लिखने का विचार है। और lexical analygator तो कमाल है—कंपनी की internal presentations में source के साथ कई बार दिख चुका है, और एक समय whiteboard fan art भी था
    • Game Programming Patterns भी शानदार है। दोनों किताबों में writing style बहुत ईमानदार और सीधा लगता है
      कभी-कभी लगता है कि कुछ authors को दिखाना पड़ता है कि यह पूरा क्षेत्र black magic है; हालांकि शायद GoF design patterns समझने के लिए मैं ही कम था
    • मैंने अभी किताब पूरी नहीं की है, लेकिन इसे ऑनलाइन मुफ्त में उपलब्ध कराने के लिए सच में आभारी हूँ। मैंने paper book, PDF और Kindle edition तीनों खरीदे हैं, और दूसरों को भी ऐसे ही लेखक को support करने की सलाह देता हूँ
    • यह किताब और Writing An Interpreter In Go ऐसी किताबें हैं जिन्हें समय मिलने पर ज़रूर पढ़ना चाहता हूँ। मेरे पास एक basic typesetting language बनाने के कई ideas हैं
  • Crumb(https://github.com/liam-ilan/crumb) बनाते समय मैंने Crafting Interpreters पढ़ी थी, और खासकर scope और local variables वाले हिस्से बेहद ज़रूरी थे
    technical implementation और conceptual insight का balance अच्छा है, इसलिए किताब के तय रास्ते से हटकर कुछ करने की कोशिश करते समय भी बहुत मदद मिलती है। ऐसी technical writing अपने आप में लक्ष्य मानने लायक high-quality resource है

    • आपने खुद को “aspiring engineer” कहा, लेकिन Crumb बनाने के बाद तो अच्छी खबर है
    • आपको पहले से engineer कहा जा सकता है। विनम्र होने की ज़रूरत नहीं, और computer science degree पूरी करना ही engineer बनने की शर्त नहीं है
      documentation भी अच्छी है और project भी शानदार है
    • अच्छा दिखता है। जानना चाहूँगा कि आपने कौन से data types डालने हैं, यह कैसे तय किया
  • इस किताब में मुझे सबसे अच्छी बात यह लगी कि यह उसी 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 में नहीं, कई जगह काम आते हैं

    • जानना चाहूँगा कि compilers के अलावा कहाँ उपयोगी हैं। उदाहरण के लिए data format parsing जैसी जगह हो सकती है
  • इस किताब का एक 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 नहीं दिखते उन्हें आसानी से नज़रअंदाज़ कर दिया जाता है

    • मेरे लिए इस किताब ने इन topics को रहस्यमय दिखना बंद कर दिया, बल्कि second और third steps शुरू करने लायक बना दिया
      सारी techniques को शुरुआत से खुद reinvent करना ज़रूरी नहीं है। giants के shoulders पर खड़ा होना स्वाभाविक बात है
    • मुझे नहीं पता था कहाँ से शुरू करूँ, और लगता था कि ऐसा project मेरी क्षमता से बाहर की कोई magic चीज़ है। लेकिन Crafting Interpreters पढ़ने के बाद समझ आया कि मेरे ideas को बस थोड़े से push की ज़रूरत थी
      अगर मैंने पहले CI जैसी कोई चीज़ न पढ़ी होती, तो शायद खुद interpreter लिखने की कोशिश ही न करता, और third step तक नहीं पहुँचता
    • जब मैंने अभी-अभी Java सीखना शुरू किया था, तब अपनी language बनाने की इच्छा याद है। मैंने बिना खोजे operator precedence algorithm implement किया था, जिसमें token list को scan करके हर बार सबसे high-priority subexpression ढूँढता था
      recursion नहीं था; stack में manually push और pop करता था। समस्या यह थी कि parsing को ठीक से समझता नहीं था, इसलिए language का ज्यादातर हिस्सा string.split और string.replace से implement किया, और जैसा expected था, ऐसे concepts बन गए जिन्हें nest नहीं किया जा सकता था। अफसोस है कि source code संभालकर नहीं रखा
    • मैंने भी बिल्कुल यही किया। पहले step के तौर पर TeX जैसी language बनाई और macro definitions व substitutions implement किए
      कुछ ही दिनों में इतने bugs मिले कि मेरा approach थोड़ा ज्यादा academic हो गया और मैंने किताबें पढ़ना शुरू किया। फिर भी वह बेहतरीन first step था, क्योंकि ऐसी कोशिश न की होती तो शायद यह भी न पता चलता कि यह पूरा एक किताब-भर का topic है
  • ऐसे समर्पण वाले लोगों और development infra को बनाए रखने वाले सभी लोगों का मैं सचमुच सम्मान करता हूँ, लेकिन यह सोचकर राहत मिलती है कि मेरा “अपनी भाषा बनाना चाहता हूँ” वाला दौर थोड़ी-सी दिलचस्पी पर ही खत्म हो गया
    काम की मात्रा सच में बहुत भारी है

    • ज़रूरी नहीं कि काम की मात्रा हमेशा बहुत भारी ही हो। मूल SICP किताब का Lisp-in-Lisp या Haskell में लिखा lambda calculus interpreter तो एक स्क्रीन में भी आ जाता है
  • जानना चाहता हूँ कि 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 चीज़ बनाते जाने का मज़ा खो जाता है
    • A. W. Appel की Modern Compiler Implementation in ML है
      उसी किताब के C और Java editions भी हैं, लेकिन मेरी नज़र में वे कमज़ोर हैं। ML edition के साथ इस्तेमाल करना बेहतर रहेगा
    • parametric polymorphism और type inference का core आखिरकार Algorithm W को implement करना ही है। Online कोई toy implementation ढूँढकर खुद छेड़छाड़ कर सकते हैं
      मैंने देखा कि https://github.com/wh5a/Algorithm-W-Step-By-Step/blob/master... की implementation बहुत पुराने style की है, इसलिए उसे modernize और साफ़ करके https://gist.github.com/kccqzy/fa8a8ae12a198b41c6339e8a5c459... तक बनाया। उसके बाद मैंने जानबूझकर कई हिस्सों को “तोड़कर” देखा कि algorithm कैसे टूटता है
    • थोड़ा ज़्यादा theoretical है, लेकिन Coursera के compiler course को धीरे-धीरे follow करना मेरे लिए बड़ा turning point था। कुछ videos मुझे कई बार दोबारा देखने पड़े
      जिस computer science task को आप समझते हैं कि सिर्फ़ जादूगर ही कर सकते हैं, उसे approachable तरीके से करके देखने की मैं ज़ोरदार सलाह देता हूँ। एक-दो चीज़ें कर लेने के बाद समझ आता है कि मुश्किल तो है, लेकिन ज़्यादातर बस धक्का लगाते हुए आगे बढ़ने वाला काम है, और confidence बहुत बढ़ता है। जो लोग इस रास्ते पर जाना चाहते हैं, वे zellyn@(most things) पर contact कर सकते हैं
  • अभी-अभी part 2 खत्म किया है और यह सचमुच बहुत अच्छी किताब है। हर chapter के suggested exercises में से एक-दो खुद करके देखें तो content समझने में बहुत मदद मिलती है