کتاب Build your own Programming Language, 2nd Edition: A programmer’s guide to designing compilers, DSLs and interpreters for solving modern computing problems (زبان برنامه نویسی خود را بسازید، ویرایش دوم: راهنمای برنامه نویس برای طراحی کامپایلر، DSL و مفسر برای حل مسائل محاسباتی مدرن) منبعی ضروری برای برنامهنویسانی است که میخواهند به دنیای پیچیده طراحی و پیادهسازی زبان بپردازند.
کتاب Build your own Programming Language که توسط Marc-Andre Cournoyer تألیف شده است، به عنوان یک راهنمای جامع برای کسانی است که به دنبال درک پیچیدگیهای ساخت کامپایلر، توسعه زبان مخصوص دامنه (DSL) و طراحی مفسر هستند. این نسخه با تمرکز بر حل چالشهای محاسباتی معاصر، خوانندگان را با دانش و ابزارهای مورد نیاز برای ایجاد زبان برنامهنویسی خود متناسب با حوزههای مشکل خاص مجهز میکند.
کتاب Build your own Programming Language پر از بینشهای عملی، نمونههای کد و مثالهای گویا، برنامهنویسان را قادر میسازد تا سفری غنی از خلق زبان را آغاز کنند و آنها را قادر میسازد سطوح جدیدی از تخصص و نوآوری توسعه نرمافزار را باز کنند.
چه یک توسعهدهنده با تجربه باشید که به دنبال گسترش مجموعه مهارتهای خود هستید یا یک علاقهمند تازهکار که مشتاق کشف مرزهای برنامهنویسی هستید، «زبان برنامهنویسی خود را بسازید، نسخه دوم» یک نقشه راه ارزشمند برای پیمایش در تفاوتهای ظریف مهندسی زبان ارائه میدهد.
در ادامه مقدمهای از کتاب Build your own Programming Language را از زبان نویسنده شرح خواهیم داد.
مقدمهای بر کتاب Build your own Programming Language:
این نسخه دوم اساساً به پیشنهاد یک خواننده ویرایش اول شروع شد، که یک روز با من تماس گرفت و توضیح داد که از کتاب برای یک پروژه زبان برنامهنویسی استفاده میکنند. این پروژه کدی را برای مفسر بایت کد یا مجموعه دستورالعملهای بومی که در نسخه اول پوشش داده شده بود تولید نمیکرد.
در عوض، آنها در حال ایجاد یک ترانسپایلر از یک زبان برنامهنویسی قدیمی قدیمی به یک زبان اصلی مدرن بودند. پروژههای زیادی وجود دارد، زیرا کدهای قدیمی زیادی وجود دارد که هنوز به شدت مورد استفاده قرار میگیرند. مترجم Unicon خود به عنوان یک پیش پردازشگر شروع به کار کرد و سپس گسترش یافت تا اینکه به نوعی تبدیل به یک ترانسپایلر شد.
بنابراین، هنگامی که Packt برای ویرایش دوم درخواست کرد، طبیعی بود که فصل جدیدی در مورد آن موضوع پیشنهاد شود. این نسخه دارای یک فصل ۱۱ جدید است و همه فصلها (با شروع از فصل ۱۱ در نسخه قبلی) تعداد آنها یک افزایش یافته است.
دومین جنبه اصلی این ویرایش دوم توسط Packt درخواست شد و اصلاایده من نیست. آنها درخواست کردند که فصل رنگآمیزی نحو IDE برای پرداختن به موضوع افزودن رنگبندی نحو به IDEهای رایجی که من ننوشتم و استفاده نمیکنم، به جای محتوای قبلی آن در مورد رنگآمیزی نحو در IDEهای Unicon، تمدید شود.
اگرچه این موضوع خارج از منطقه راحتی من است، اما موضوع ارزشمندی است که در حال حاضر تا حدودی مستند نشده است و به راحتی سزاوار آن است، بنابراین اینجاست. شما بهعنوان خواننده، میتوانید تصمیم بگیرید که آیا من توانستهام این کار را به عنوان مقدمهای برای آن موضوع انجام دهم.
پس از بیش از ۶۰ سال توسعه زبان در سطح بالا، برنامهنویسی هنوز بسیار دشوار است. تقاضا برای نرمافزارهایی با اندازه و پیچیدگی روزافزون به دلیل پیشرفتهای سختافزاری افزایش یافته است، در حالی که زبانهای برنامهنویسی بسیار کندتر پیشرفت کردهاند. ایجاد زبانهای جدید برای اهداف خاص یکی از پادزهرهای این بحران نرمافزاری است.
کتاب Build your own Programming Language در مورد ساخت زبانهای برنامهنویسی جدید است. موضوع طراحی زبان برنامهنویسی معرفی شده است، اگرچه تأکید اولیه بر پیادهسازی زبان برنامهنویسی است.
در این موضوع به شدت مورد مطالعه، جنبه ابداعی کتاب Build your own Programming Language ادغام آن از ابزارهای کامپایلر، کامپایلر سنتی (Flex و Byacc) با دو زبان پیادهسازی سطح بالاتر است.
یک زبان بسیار سطح بالا (Unicon) از طریق ساختارهای داده و الگوریتمهای کامپایلر مانند کره میگذرد، در حالی که یک زبان رایج مدرن (جاوا) نشان میدهد که چگونه میتوان همان کد را در یک محیط تولید معمولی پیادهسازی کرد.
چیزی که بعد از کلاس کامپایلر کالج واقعاً متوجه نشدم این بود که کامپایلر تنها بخشی از پیادهسازی زبان برنامهنویسی است. زبانهای سطح بالاتر، از جمله بیشتر زبانهای جدیدتر، ممکن است یک سیستم زمان اجرا داشته باشند که کامپایلر آنها را کوچکتر کند.
به همین دلیل، نیمه دوم کتاب Build your own Programming Language زمان با کیفیتی را صرف جنبههای مختلف سیستمهای زمان اجرا زبان، از مفسر بایت تا جمعآوری زباله میکند.
کتاب Build your own Programming Language برای چه کسی است؟
این کتاب برای توسعهدهندگان نرمافزاری است که بهایده اختراع زبان خود یا توسعه یک زبان خاص دامنه علاقهمند هستند.
دانشجویان علوم کامپیوتر که دورههای ساخت کامپایلر را میگذرانند نیز این کتاب را به عنوان یک راهنمای عملی برای پیادهسازی زبان برای تکمیل کتابهای درسی تئوری بسیار مفید خواهند یافت. دانش سطح متوسط و تجربه کار با یک زبان سطح بالا مانند جاوا یا سی پلاس پلاس برای استفاده حداکثری از این کتاب مورد نیاز است.
آنچه کتاب Build your own Programming Language پوشش میدهد:
فصل ۱، چرا یک زبان برنامهنویسی دیگر بسازیم؟، در مورد اینکه چه زمانی باید یک زبان برنامهنویسی بسازیم، و چه زمانی باید یک کتابخانه تابع یا یک کتابخانه کلاس طراحی کنیم، بحث میکند. بسیاری از خوانندگان این کتاب از قبل میدانند که میخواهند زبان برنامهنویسی خود را بسازند. برخی باید به جای آن یک کتابخانه طراحی کنند.
فصل ۲، طراحی زبان برنامهنویسی، نحوه تعریف دقیق یک زبان برنامهنویسی را پوشش میدهد که قبل از تلاش برای ساختن یک زبان برنامهنویسی دانستن آن مهم است. این شامل طراحی ویژگیهای واژگانی و نحوی زبان و همچنین معنایی آن میشود. طرحهای زبان خوب معمولاً تا حد امکان از نحو آشنا استفاده میکنند.
فصل ۳ کتاب Build your own Programming Language، اسکن کد منبع، تحلیل واژگانی، از جمله نشانهگذاری عبارت منظم و ابزارهای Ulex و JFlex را ارائه میدهد. در پایان، فایلهای کد منبع را باز میکنید، آنها را کاراکتر بهنویسه میخوانید، و محتوای آنها را بهعنوان جریانی از نشانهها شامل کلمات، عملگرها و نشانههای نقطهگذاری در فایل منبع گزارش میدهید.
فصل ۴، تجزیه، تجزیه و تحلیل نحو، از جمله گرامرهای بدون متن و ابزارهای iyacc و byacc/j را ارائه میکند. شما یاد خواهید گرفت که چگونه مشکلات گرامرهایی را که از تجزیه جلوگیری میکند اشکال زدایی کنید و در صورت وقوع خطاهای نحوی را گزارش دهید.
فصل ۵ کتاب Build your own Programming Language، درختان نحو، درختان نحو را پوشش میدهد. محصول فرعی اصلی فرآیند تجزیه، ساخت یک ساختار داده درختی است که ساختار منطقی کد منبع را نشان میدهد. ساخت گرههای درختی در اقدامات معنایی که روی هر قانون دستور زبان اجرا میشود، صورت میگیرد.
فصل ۶، جداول نماد، به شما نشان میدهد که چگونه جداول نماد را بسازید، نمادها را در آنها وارد کنید، و از جداول نماد برای شناسایی دو نوع خطای معنایی استفاده کنید: متغیرهای اعلام نشده و غیرقانونی مجدداً اعلام شده. برای درک ارجاعات متغیر در کدهای اجرایی، دامنه و طول عمر هر متغیر باید ردیابی شود. این با استفاده از ساختارهای داده جدولی که به درخت نحو کمکی هستند، انجام میشود.
فصل ۷ کتاب Build your own Programming Language، بررسی انواع پایه، بررسی نوع را پوشش میدهد، که یک کار اصلی مورد نیاز در اکثر زبانهای برنامهنویسی است. بررسی نوع میتواند در زمان کامپایل یا در زمان اجرا انجام شود.
این فصل از کتاب Build your own Programming Language، مورد رایج بررسی نوع استاتیک زمان کامپایل برای انواع پایه را پوشش میدهد که به آن انواع اتمی یا اسکالر نیز گفته میشود.
فصل ۸، بررسی انواع آرایهها، فراخوانیهای روش و دسترسیهای ساختاری، به شما نشان میدهد که چگونه میتوانید نوع بررسی آرایهها، پارامترها و انواع فراخوانی متدها را در زیرمجموعه Jzero جاوا انجام دهید.
بخشهای سختتر بررسی نوع زمانی است که انواع چندگانه یا ترکیبی درگیر هستند. این مورد زمانی است که باید توابع با انواع پارامترهای متعدد بررسی شوند، یا زمانی که آرایهها، جداول هش، نمونههای کلاس یا سایر انواع ترکیبی باید بررسی شوند.
فصل ۹، تولید کد میانی، نحوه تولید کد میانی را با نگاه کردن به مثالهایی برای زبان Jzero به شما نشان میدهد. قبل از تولید کد برای اجرا، اکثر کامپایلرها درخت نحو را به لیستی از دستورالعملهای کد میانی مستقل از ماشین تبدیل میکنند. جنبههای کلیدی جریان کنترل، مانند تولید برچسبها و دستورالعملهای goto، در این مرحله بررسی میشوند.
فصل ۱۰، رنگآمیزی نحو در یک IDE، به چالش ترکیب اطلاعات از تجزیه و تحلیل نحو در یک IDE به منظور ارائه رنگبندی نحو و بازخورد بصری در مورد خطاهای نحوی میپردازد. یک زبان برنامهنویسی به چیزی بیش از یک کامپایلر یا مفسر نیاز دارد – به اکوسیستمی از ابزار برای توسعهدهندگان نیاز دارد. این اکوسیستم میتواند شامل دیباگرها، کمک آنلاین یا یک محیط توسعه یکپارچه باشد.
فصل ۱۱، پیش پردازشگرها و ترانسپایلرها، یک نمای کلی از تولید خروجی در نظر گرفته شده برای کامپایل یا تفسیر توسط زبان سطح بالا دیگر ارائه میدهد. پیش پردازندهها معمولاً خط گرا هستند و خطوط را به خروجی بسیار مشابه ترجمه میکنند، در حالی که ترانسپایلرها معمولاً یک زبان سطح بالا را به یک زبان سطح بالا متفاوت با تجزیه کامل و تغییرات معنایی قابل توجه ترجمه میکنند.
فصل ۱۲ کتاب Build your own Programming Language، مفسران بایت کد، طراحی مجموعه دستورالعملها و مفسری را که بایت کد را اجرا میکند، پوشش میدهد. یک زبان جدید مخصوص دامنه ممکن است شامل ویژگیهای برنامهنویسی دامنه سطح بالا باشد که مستقیماً توسط CPUهای اصلی پشتیبانی نمیشوند.
عملیترین راه برای تولید کد برای بسیاری از زبانها، تولید بایت کد برای یک ماشین انتزاعی است که مجموعه دستورات آن مستقیماً دامنه را پشتیبانی میکند و سپس برنامهها را با تفسیر آن مجموعه دستورالعمل اجرا میکند.
فصل ۱۳ کتاب Build your own Programming Language، تولید بایت کد، با تولید کد ادامه مییابد، کد میانی را از فصل ۹ کتاب Build your own Programming Language، تولید کد میانی گرفته و بایت کد را از آن تولید میکند. ترجمه از کد میانی به بایت کد مربوط به قدم زدن در یک لیست پیوندی غول پیکر است که هر دستور کد میانی را به یک یا چند دستورالعمل بایت کد ترجمه میکند. به طور معمول، این یک حلقه برای عبور از لیست پیوند شده است، با یک تکه کد متفاوت برای هر دستورالعمل کد میانی.
فصل ۱۴، Native Code Generation، یک نمای کلی از تولید کد بومی برای x۸۶_۶۴ ارائه میدهد. برخی از زبانهای برنامهنویسی برای دستیابی به عملکرد مورد نیاز خود به کد بومی نیاز دارند. تولید کد بومی مانند تولید بایت کد است، اما پیچیدهتر است و شامل تخصیص رجیستر و حالتهای آدرس دهی حافظه است.
فصل ۱۵، پیادهسازی عملگرها و توابع داخلی، نحوه پشتیبانی از ویژگیهای زبان سطح بالا و خاص دامنه را با افزودن عملگرها و توابعی که در زبان تعبیه شدهاند، توضیح میدهد.
ویژگیهای زبان بسیار سطح بالا و خاص دامنه اغلب توسط عملگرها و توابعی که در زبان تعبیه شدهاند به جای توابع کتابخانهای به بهترین شکل نشان داده میشوند. افزودن داخلیها ممکن است زبان شما را ساده کند، عملکرد آن را بهبود بخشد یا عوارض جانبی را در معنای زبان شما فعال کند که در غیر این صورت دشوار یا غیرممکن خواهد بود.
مثالهای این فصل از کتاب Build your own Programming Language، از Unicon گرفته شدهاند، زیرا سطح بسیار بالاتری از جاوا دارد و معنای پیچیدهتری را در داخلی خود پیادهسازی میکند.
فصل ۱۶ کتاب Build your own Programming Language، ساختارهای کنترل دامنه، زمانی را پوشش میدهد که به یک ساختار کنترلی جدید نیاز دارید، و نمونه ساختارهای کنترلی را ارائه میدهد که متن را با استفاده از اسکن رشته پردازش میکند و مناطق گرافیکی را ارائه میدهد.
کد عمومی در فصلهای قبلی کتاب Build your own Programming Language، ساختارهای کنترل شرطی و حلقهای پایه را پوشش میدهد، اما زبانهای خاص دامنه اغلب معنایی منحصربهفرد یا سفارشیسازی شدهای دارند که ساختارهای کنترل جدیدی را برای آن معرفی میکنند.
افزودن ساختارهای کنترلی جدید بسیار دشوارتر از افزودن یک تابع یا عملگر جدید است، اما این چیزی است که باعث میشود زبانهای مخصوص دامنه به جای نوشتن کتابخانههای کلاس، ارزش توسعه پیدا کنند.
فصل ۱۷، جمعآوری زباله، چند روش را ارائه میدهد که با آنها میتوانید جمعآوری زباله را به زبان خود پیادهسازی کنید. مدیریت حافظه یکی از مهمترین جنبههای زبانهای برنامهنویسی مدرن است و تمامی زبانهای برنامهنویسی جالب دارای مدیریت خودکار حافظه از طریق جمعآوری زباله هستند.
این فصل از کتاب Build your own Programming Language، چند گزینه برای نحوه اجرای جمعآوری زباله به زبان خود ارائه میکند، از جمله شمارش مرجع، و جمعآوری زباله علامتگذاری و جارو کردن.
فصل هجدهم کتاب Build your own Programming Language، اندیشههای نهایی، موضوعات اصلی ارائه شده در کتاب را بازتاب میدهد و به شما فرصتی برای تفکر میدهد. آنچه از نوشتن این کتاب آموخته شده را در نظر میگیرد و پیشنهادات زیادی برای مطالعه بیشتر به شما میدهد.
ضمیمه، Unicon Essentials، به اندازه کافی زبان برنامهنویسی Unicon را برای درک نمونههای موجود در این کتاب که در Unicon هستند، توصیف میکند. بیشتر نمونهها در کنار هم در Unicon و Java آورده شدهاند، اما نسخههای Unicon معمولاً کوتاهتر و خواندن آسانتر هستند.
پاسخها، پاسخهای پیشنهادی به سؤالات تجدیدنظر در پایان هر فصل را به شما میدهد.
سرفصلهای کتاب Build your own Programming Language:
- Preface
- Section I: Programming Language Frontends
- Why Build Another Programming Language?
- Programming Language Design
- Scanning Source Code
- Parsing
- Syntax Trees
- Section II: Syntax Tree Traversals
- Symbol Tables
- Checking Base Types
- Checking Types on Arrays, Method Calls, and Structure Accesses
- Intermediate Code Generation
- Syntax Coloring in an IDE
- Section III: Code Generation and Runtime Systems
- Preprocessors and Transpilers
- Bytecode Interpreters
- Generating Bytecode
- Native Code Generation
- Implementing Operators and Built-In Functions
- Domain Control Structures
- Garbage Collection
- Final Thoughts
- Section IV: Appendix
- Appendix: Unicon Essentials
- Answers
- Other Books You May Enjoy
- Index
جهت دانلود کتاب Build your own Programming Language میتوانید پس از پرداخت، دریافت کنید.
دیدگاهها
هیچ دیدگاهی برای این محصول نوشته نشده است.