زبان برنامهنویسی با LLVM
✅ سرفصل و جزئیات آموزش
آنچه یاد خواهید گرفت:
- زیرساخت کامپایلر LLVM
- فرانتاند LLVM
- ایجاد زبان برنامهنویسی خود با LLVM
- برنامهنویسی شیگرا - کامپایل کردن کلاسها
- برنامهنویسی تابعی - تابع لامبدا و Closures
- دستورالعملهای برنچ و کنترل جریان
- LLVM IR
- تولید کد
توضیحات دوره
بررسی دوره
زبانهای برنامهنویسی چگونه در under the hood کار میکنند؟ تفاوت بین کامپایلر و مفسر چیست؟ ماشین مجازی و کامپایلر JIT چیست؟ و تفاوت بین برنامهنویسی تابعی و دستوری چیست؟
زمانی که به پیادهسازی زبان برنامهنویسی میرسیم، سوالات زیادی وجود دارد.
مشکل با کلاسهای کامپایلر در مدارس این است که این کلاسها معمولاً به عنوان «علم موشکی سخت» ارائه میشوند که فقط برای مهندسان پیشرفته است.
علاوه بر این، کتابهای کلاسیک کامپایلر از مباحثی با اهمیت کم شروع میکنند، مانند تحلیل لکسیکال و به سمت جنبههای نظری گرامرهای رسمی پیش میروند. با زمان پیادهسازی اولین ماژول Tokenizer، دانشجویان معمولاً علاقه خود را به موضوع از دست میدهند، زیرا فرصتی برای شروع پیادهسازی یک زبان برنامهنویسی واقعی ندارند. تمام این مسائل بر یک ترم کامل از دست و پنجه نرم کردن با tokenizers و گرامرهای BNF گسترش مییابد بدون اینکه سمانتیک واقعی زبانهای برنامهنویسی را درک کنند.
ما معتقدیم که باید بتوانیم سمانتیک کامل یک زبان برنامهنویسی end-to-end را در 4 تا 6 ساعت بسازیم با محتوایی که به طور مستقیم به موضوع میپردازد و در جلسات کدنویسی لایو به عنوان برنامهنویسی جفت نمایش داده میشود و به طور قابل فهم توصیف میشود.
در کلاس زبان برنامهنویسی با LLVM ما بر کامپایل کردن زبان خود به LLVM IR تمرکز میکنیم و یک زبان برنامهنویسی سطح پایین ایجاد میکنیم. با کار نزدیک با زیرساخت کامپایلر LLVM، شما متوجه خواهید شد که چگونه کامپایل کردن سطح پایین و زبانهای سطح تولید، مانند ++C و Rust و غیره، امروز کار میکنند.
پیادهسازی یک زبان برنامهنویسی همچنین سطح عملی شما را در دیگر زبانهای برنامهنویسی متخصصتر میکند.
پیشنیازهای دوره
این کلاس سه پیشنیاز دارد.
دوره زبان برنامهنویسی با LLVM یک توسعه طبیعی برای کلاسهای قبلی است و با ساخت یک مفسر از ابتدا (که به عنوان اصول تفسیر نیز شناخته میشود)، جایی که ما همچنین یک زبان برنامهنویسی کامل میسازیم، اما در سطح بالاتر، سطح AST، و همچنین ساخت یک ماشین مجازی همراه است. مگر اینکه شما قبلاً درک کاملی از نحوه کار زبانهای برنامهنویسی در این سطح داشته باشید، یعنی اینکه بدانید eval و closure، زنجیره اسکوپ، محیطها و سایر ساختارها چه هستند. شما باید کلاس مفسرها را به عنوان پیشنیاز بگذرانید.
همچنین، رفتن به سطح پایینتر (bitcode/IR) که زبانهای تولید در آن زندگی میکنند، ما نیاز به تجربه اولیه در ++C داریم. این کلاس با این حال درباره ++C نیست، بنابراین ما فقط از عبارات بسیار پایهای استفاده میکنیم که (و قابل انتقال) به دیگر زبانها است.
مخاطبان دوره:
این کلاس برای هر مهندس کنجکاو است که میخواهد مهارتهای ساخت سیستمهای پیچیده (و ساخت یک زبان برنامهنویسی که یک کار مهندسی پیشرفته است!) را بدست آورد و دانش قابل انتقالی برای ساخت چنین سیستمهایی کسب کند.
اگر شما به طور خاص به LLVM، زیرساخت کامپایلر آن و نحوه ساخت زبان خودتان علاقهمند هستید، این کلاس برای شما نیز مناسب است.
برای پیادهسازی از چه موردی استفاده میشود؟
از آنجا که کامپایلرهای سطح پایین به عملکرد مربوط میشوند، معمولاً در زبانهای سطح پایین مانند C یا ++C پیاده میشوند. ما نیز دقیقاً همین کار را انجام میدهیم، با این تفاوت که عمدتاً ویژگیهای اولیه از ++C را استفاده میکنیم و از جزئیات ++C دور میشویم. کد باید به راحتی قابل تبدیل و قابل حمل به هر زبان دیگری، برای مثال Rust یا حتی زبانهای سطح بالاتر مانند پایتون باشد. استفاده از ++C همچنین پیادهسازی کامپایلر JIT بعدی را آسانتر میکند.
نکته - ما میخواهیم که دانشجویان ما واقعاً هر جزئیات کامپایلر LLVM را خودشان دنبال کرده، درک و پیاده کنند، به جای اینکه فقط راهحل نهایی را کپی-پیست کنند.
ویژگیهای خاص این کلاس چیست؟
- خلاصه و دقیق - هر درس کافی و مختصر است و اطلاعاتی را که مربوط به موضوع است توصیف میکند و از مطالب یا بحثهای غیرمرتبط دوری میکند.
- ارائه انیمیشنی همراه با یادداشتهای ویرایش لایو - این باعث میشود تا درک مباحث آسانتر شده و نشان دهد که چگونه ساختارهای آبجکت به هم مرتبط هستند. اسلایدهای ثابت برای محتوای پیچیده به سادگی جواب نمیدهند.
- جلسه کدنویسی لایو end-to-end با تکالیف - کد منبع کامل، از شروع از ابتدا و تا انتهای کار، در ویدئوهای آموزشی ارائه شده است.
این دوره شامل چه مواردی است؟
این دوره به چهار بخش تقسیم میشود و در مجموع شامل 20 درس و بسیاری مباحث فرعی در هر درس است. در زیر فهرست مطالب و برنامه درسی آمده است.
بخش 1 - ساختارهای اولیه LLVM
در این بخش ما پایپلاین کامپایل و تفسیر را توصیف کرده و شروع به ساخت زبان خود میکنیم. مباحث مربوط به LLVM IR، آبجکت و کامپایل کردن bitcode مورد بحث قرار میگیرد.
بخش 2 - توابع و استک
در این بخش ما ساختارهای کنترل جریان، مانند عبارات if و حلقههای while را پیادهسازی کرده و درباره متغیرهای استک، بلوکهای تودرتو و متغیرهای محلی صحبت میکنیم، همچنین توابع را کامپایل میکنیم.
بخش 3 - برنامهنویسی شیگرا (OOP)
در این بخش ما مفاهیم OOP، مانند کلاسها و نمونهها را پیادهسازی کرده و درباره تخصیص حافظه heap و garbage collectors صحبت میکنیم.
بخش 4 - توابع Higher-order
در این بخش ما روی closures، برنامهنویسی تابعی و توابع لامبدا تمرکز کرده و اجرایی نهایی را پیادهسازی میکنیم.
این دوره برای چه کسانی مناسب است؟
- مهندسان کامپایلر
- مهندسان کنجکاو علاقهمند به زبانهای برنامهنویسی
- توسعهدهندگانی که میخواهند زبان برنامهنویسی خود را از ابتدا بسازند.
زبان برنامهنویسی با LLVM
-
مقدمهای بر LLVM IR و ابزارها 13:33
-
ساختار برنامه LLVM - ماژول 06:16
-
اعداد اولیه - تابع Main 10:20
-
رشتهها - عملگر Printf 06:43
-
تجزیه - تبدیل S-expression به AST 10:23
-
نمادها - متغیرهای گلوبال 06:39
-
بلوکها - محیطها 09:59
-
متغیرهای محلی - تخصیص استک 10:50
-
عبارات باینری - عملگرهای مقایسه 04:15
-
کنترل جریان - عبارات if - حلقههای while 10:41
-
اعلانهای تابع - عبارت فراخوانی 06:24
-
مقدمهای بر کلاسها - تایپهای Struct 09:28
-
کامپایل کردن کلاسها 08:50
-
نمونهها - تخصیص حافظه Heap 10:04
-
دسترسی به ویژگی 05:15
-
وراثت کلاس - vTable 08:59
-
کاربرد متدها 07:28
-
فانکتورها - آبجکتهای قابل فراخوانی 04:41
-
Closures، سلولها و عبارات لامبدا 08:03
-
اجرای نهایی - گامهای بعدی 06:52
مشخصات آموزش
زبان برنامهنویسی با LLVM
- تاریخ به روز رسانی: 1405/04/02
- سطح دوره:متوسط
- تعداد درس:20
- مدت زمان :02:45:43
- حجم :1.15GB
- زبان:دوبله زبان فارسی
- دوره آموزشی:AI Academy