در دنیای پرجنبوجوش برنامهنویسی، جایی که زبانهایی مانند گو (Go) به دلیل سادگی، کارایی و قابلیتهای قدرتمندشان محبوبیت فزایندهای پیدا کردهاند، یادگیری ساخت یک مفسر (Interpreter) میتواند تجربهای تحولآفرین باشد. کتاب نوشتن مفسر در گو - نسخه ۱.۷، نوشته تورستن بالتازار، دقیقاً این فرصت را فراهم میکند. این کتاب شما را از صفر خط کد به یک مفسر کامل و کاربردی برای زبان برنامهنویسی مونکی (Monkey) میرساند – زبانی شبیه به C با قابلیتهای مدرن. گامبهگام، از توکنها تا خروجی نهایی، همه کدها نمایش داده و گنجانده شدهاند و مفسر کاملاً تستشده است. اگر به ساخت مفسر، lexer و parser، درخت نحو انتزاعی (AST) یا مفاهیمی مانند کلوژرها (Closures) و REPL علاقهمند هستید، این کتاب بهترین منبع برای شماست. با حدود ۲۶۰ صفحه محتوای عملی، پر از کدهای هایلایتشده، مثالهای واقعی و تستهای جامع، این اثر به شما کمک میکند تا بفهمید چگونه زبانهای تفسیری مورد علاقهتان کار میکنند. برای اطلاعات بیشتر، به سایت https://interpreterbook.com سر بزنید و نمونه رایگان را دانلود کنید.
تصور کنید که میخواهید یک زبان برنامهنویسی بسازید و بگویید: "وای، من یک زبان برنامهنویسی ساختم!" این کتاب دقیقاً این رویا را محقق میکند. نویسنده، با زبانی ساده و جذاب، شما را از اصول پایه مانند توکنسازی (Lexing) شروع میکند و به سراغ پارسینگ (Parsing)، ارزیابی درخت نحو و حتی ساختارهای داده داخلی میبرد. مونکی زبانی است با نحو شبیه C، که از let statements برای تعریف متغیرها، expressions برای محاسبات، توابع بازگشتی و دادههای پیچیده مانند آرایهها و هشها پشتیبانی میکند. مثلاً، کدی مانند let fibonacci = fn(x) { if (x < 2) { return 1; } else { fibonacci(x - 1) + fibonacci(x - 2); } }; را میتوانید بنویسید و اجرا کنید. این کتاب نه تنها تئوری را پوشش میدهد، بلکه با رویکرد کدمحور، شما را تشویق میکند تا خودتان کد بزنید و تست کنید. کلماتی مانند مفسر در گو، زبان برنامهنویسی مونکی و پراکسینگ پرت (Pratt Parsing) در سراسر صفحات تکرار میشوند تا محتوای شما برای موتورهای جستجو بهینه شود.
نوشتن مفسر در گو کتابی است که یک سال پیش آرزویش را داشتم – کتابی که پیدا نمیشد. تورستن بالتازار آن را برای "تو و من" نوشته، یعنی برای کسانی که عاشق برنامهنویسی برای لذت و یادگیری هستند. تفاوت این کتاب با دیگر منابع مفسرها و کامپایلرها در تمرکز بر کدهای عملی است. کد نه در انتها پنهان شده، بلکه قلب تپنده کتاب است. با حدود ۲۰۰ صفحه کد هایلایتشده و خوانا، این کتاب کوچک اما قدرتمند است. کدهای ارائهشده آسان برای درک، گسترش و نگهداری هستند و فقط از کتابخانه استاندارد گو استفاده میکنند – هیچ ابزار شخص ثالثی! این یعنی شما دقیقاً میفهمید هر بخش چگونه کار میکند، بدون اینکه بگویید: "اما ابزار X چطور این کار را میکند؟"
علاوه بر این، مفسر ساختهشده کاملاً تستشده است. گاهی با سبک توسعهمحور تست (TDD) و گاهی با تستهای پس از کد، میتوانید تستها را اجرا کنید، آزمایش کنید و تغییرات اعمال کنید. بهروزرسانیهای مادامالعمر برای این نسخه و تضمین بازگشت پول، ریسک خرید را صفر میکند. اگر به علوم کامپیوتر علاقهمندید اما دوره کامپایلر دانشگاه نگذراندهاید، این کتاب مقدمه ایدئالی است – بدون ۸۰۰ صفحه تئوری سنگین و ۴ پوند وزن! فقط کد، تست و شادی ساختن.
این کتاب به صورت گامبهگام، از صفر تا صد ساخت مفسر را آموزش میدهد. در ادامه، موضوعات کلیدی را مرور میکنیم:
فصلهای ابتدایی به lexer اختصاص دارند – ابزاری که کد منبع را به توکنها تجزیه میکند. شما یاد میگیرید که چگونه کاراکترها را بخوانید، کلمات کلیدی مانند let، fn و return را شناسایی کنید و توکنهایی مانند اعداد، رشتهها و عملگرها بسازید. مثلاً، برای کد let version = 1;, lexer توکنهای LET، IDENT("version")، ASSIGN، INT(1) و SEMICOLON تولید میکند. این بخش با مثالهای ساده شروع میشود و به تدریج پیچیدهتر میشود، با تستهایی که صحت lexer را تضمین میکنند.
پس از lexer، به parser میرسیم – جایی که توکنها به AST تبدیل میشوند. کتاب تکنیک پارسینگ پرت (Pratt Parsing) و پارسینگ نزولی بازگشتی (Recursive Descent Parser) را توضیح میدهد. شما یاد میگیرید که چگونه let statements، expressions (مانند infix و prefix)، block statements و function literals را پارس کنید. مثلاً، برای let awesomeValue = (10 / 2) * 5 + 30;, parser یک AST میسازد که ساختار درختی عملیات را نشان میدهد. این بخش پر از کدهای عملی است که میتوانید در گو اجرا کنید و AST را چاپ کنید تا ببینید چگونه کار میکند.
در بخش ارزیابی، tree-walking evaluator میسازید که AST را طی میکند و خروجی تولید میکند. شما با محیطها (Environments) برای مدیریت متغیرها، ارزیابی expressions و اجرای توابع آشنا میشوید. مثلاً، اجرای fibonacci(35) را میبینید که با recursion کار میکند. کتاب همچنین دادههای داخلی مانند integers، booleans، strings، arrays و hashes را پوشش میدهد، با مثالهایی مانند let people = [{"name": "Anna", "age": 24}, {"name": "Bob", "age": 99}]; و دسترسی با index expressions مانند myArray[1]["name"].
یکی از جذابترین بخشها، کلوژرها است. کتاب توضیح میدهد که کلوژرها چیستند، چگونه کار میکنند (با بستن محیطهای خارجی) و چرا مفیدند. مثلاً، let newGreeter = fn(prefix) { fn(name) { prefix + ", " + name + "!"; }; }; let hello = newGreeter("Hello"); hello("dear, future Reader!"); را میسازید. این بخش نشان میدهد چگونه توابع را به عنوان آرگومان پاس دهید و کلوژرها را در evaluator مدیریت کنید.
در نهایت، REPL (Read-Eval-Print Loop) میسازید – ابزاری که کد را خطبهخط میخواند، ارزیابی میکند و چاپ میکند. این بخش مفسر را به یک ابزار تعاملی تبدیل میکند، مانند پایتون یا گو، و شما را با چالشهای ورودی/خروجی آشنا میکند.
نوشتن مفسر در گو با ویژگیهایی متمایز میشود:
کدمحور: بیش از نیمی از صفحات کدهای syntax-highlighted و قابل اجرا هستند.
کوچک و متمرکز: ۲۶۰ صفحه، بدون پرگویی – مستقیم به اصل مطلب.
بدون وابستگی خارجی: فقط stdlib گو، برای درک کامل.
تستهای جامع: بیش از ۱۰۰ تست برای lexer، parser و evaluator، آماده اجرا.
فصل گمشده: یک فصل اضافی رایگان در مورد سیستم ماکرو Lisp-like برای مونکی، که کد را کد مینویسد، مانند unless macro.
باندل با دنباله: با نوشتن کامپایلر در گو ترکیب شود برای مسیر کامل از مفسر به کامپایلر.
این ویژگیها کتاب را به مرجعی ایدئال برای یادگیری عملی تبدیل میکنند.
این کتاب برای کسانی است که:
با ساختن یاد میگیرند و عاشق کاوش زیر کاپوت فناوری هستند.
عاشق برنامهنویسی برای لذت و یادگیری خالص.
کنجکاو از زبانهای تفسیری مانند پایتون یا جاوااسکریپت.
بدون سابقه دانشگاهی در کامپایلرها، اما مشتاق شروع.
مبتدیان که از کتابهای سنگین فراریاند و فریاد میزنند: "کد را نشانم بده!"
توسعهدهندگان گو که میخواهند مهارتهایشان را در علوم کامپیوتر گسترش دهند.
اگر همیشه میخواستید بگویید "من یک زبان ساختم!"، این کتاب شماست.
خوانندگان از سراسر جهان این کتاب را ستودهاند. میچل هاشیموتو، بنیانگذار HashiCorp، میگوید: "برای مهندسانی که با lexer، parser و evaluator آشنا نیستند، عالی است. جادوی علوم کامپیوتر را برمیدارد." لورن تان، مهندس خودآموخته، اضافه میکند: "سفر یادگیری با توضیحات فوقالعاده هدایت میشود." دیگر نظرات شامل: "بهترین کتاب برای شروع کامپایلرها" و "کدهای ساده اما قدرتمند، ایدهآل برای گو."
کتاب پر از مثالهای مونکی است:
let statements: let version = 1;
expressions پیچیده: (10 / 2) * 5 + 30
توابع بازگشتی: fibonacci با if-else و return.
آرایهها و هشها: people[0]["name"] برای "Anna".
کلوژرها: newAdder که adder برمیگرداند.
ماکروها (در فصل گمشده): unless (condition) { consequence; } else { alternative; }
این مثالها با کد گو همراهند و قابل اجرا.
با مطالعه، شما:
مفسر C-like از صفر میسازید.
lexer، parser و AST را درک میکنید.
کلوژرها و REPL را پیادهسازی میکنید.
تستمحور کار میکنید.
دانش گو را در طراحی زبان اعمال میکنید.
این کتاب اعتمادبهنفس برای پروژههای بزرگتر میدهد.
نظرات کاربران