طراحی زبانهای برنامهسازی
Design of Programming Languages
شماره درس: ۴۰۳۶۴ | تعداد واحد: ۳ |
مقطع: کارشناسی | نوع درس: نظری |
پیشنیاز: برنامهسازی پیشرفته | همنیاز: – |
اهداف درس
اهداف اصلی این درس عبارتند از: ۱) مروری بر سیر طبیعی تحولات مفاهیم و روشهای طراحی و پیادهسازی نسلهای مختلف زبانهای برنامهسازی به روشی تجربی و گام به گام، ۲) معرفی روشهای مهندسی زبانهای برنامهسازی در مراحل طراحی و پیادهسازی به کمک زبانهای تغییرپذیر یا قابل برنامهسازی به خصوص با تاکید بر اهمیت طراحی و پیادهسازی زبانهای ویژه دامنه ، ۳) آشنایی با پیاده سازی مفسرها به ویژه بر بستر ماشینهای مجازی و ۴) مروری بر اصول و مسائل مرتبط با طراحی زبانهای برنامهسازی و همچنین روشها و ساختارهای دادهای به کار رفته در پیادهسازی یا محقق کردن محیط برنامه نویسی.
ریز مواد
- مقدمه
- تاریخچه تکاملی زبانهای برنامهسازی و معرفی برخی زبانهای مهم از منظر تحولات تاریخی
- معرفی مقایسهای سنتهای اصلی برنامهسازی (سنتهای برنامهسازی امری-رویهای ، شیگرا ، برنامهسازی مبتنی بر قاعده و سنت برنامهسازی توصیفی-تابعی ) از منظر نگاه آنها به مفهوم و تعریف برنامه.
- تفسیر یا ترجمه
- مقایسه مفهوم تفسیر و ترجمه هم از منظر طراحی زبان و هم از منظر نحوه و مسائل مرحلهی پیادهسازی
- مهندسی زبان
- آشنایی با زبانها و ابزارهای موجود برای ایجاد امکان طراحی زبانهای ویژهی دامنه و پیادهسازی کارا و سریع مفسر آنها. پیشنهاد خاص: معرفی و تمرین عملی کار با ابزار برنامهپذیر DrRacket.
- برنامهسازی تابعی
- مروری بر مفاهیم اصلی برنامهنویسی تابعی و حساب لامبدا همراه با تمرینات و پروژههای عملی. زبان پیشنهادی Scheme (بر اساس نحو و معناشناسی کتاب Friedman) یا Racket (بر اساس نحو و معناشناسی کتاب Krishnamurthi). در واقع برداشتی امروزین از زبان Lisp بر بسترهای برنامهپذیر (معرفی مختصری از امکانات برنامهسازی تابعی زبان Java ویرایش 8 به بعد و تمرینی عملی بر آن نیز برای علاقهمند سازی دانشجویان توصیه میشود)
- طراحی تکاملی یک زبان برنامه نویسی و پیادهسازی گام به گام مفسر آن
- زبان حاوی عبارات محاسباتی (بدون اثر جنبی حافظهای)
- افزودن رویهها(زیربرنامهها)ی غیربازگشتی و سپس بازگشتی به زبان و مفسر آن
- افزودن مفاهیم حوزهی تعریف و دامنه اعتبار متغیرها به زبان و مفسر آن
- افزودن امکان تاثیر بر مقادیر حافظه (وجود متغیر از نوع ارجاع دهنده یا آدرس) به زبان و مفسر آن
- افزودن مفهوم نوعدار بودن متغیرها به زبان و مفسر آن
- ایجاد امکان تعریف مادول، شی و کلاس (ایجاد امکان برنامه نویسی مادولار و شی گرا) در زبان طراحی شده و پیادهسازی مفسر آن.
- مباحث تکمیلی منتخب
- معرفی اجمالی برخی زبانهای برنامهسازی مطرح مانندML و برداشتهای بعدی آن، Haskell، Scala و F#
- مروری بر نیازمندهایی از سایر زمینهها که بر طراحی و پیادهسازی زبانها تاثیر میگذارند مانند نیازمندیهای برنامهسازی موازی یا همروند، بیدرنگ بودن، تحت وب بودن و مهندسی نرمافزار مولفهگرا یا سرویسگرا.
- مقدمهای بر معناشناسی زبانهای برنامهسازی و استدلال مبتنی بر آن
- معناشناسی عملیاتی
- معناشناسی ارجاعی
- معناشناسی اصل موضوعی (منطق هور)
ارزیابی
- آزمون نیم ترم (۲۵% کل نمره)
- آزمون پایان ترم (۴۰% کل نمره)
- تمرین: شامل ۱) تمرینات برنامه نویسی تابعی ۲) تمرینات گام به گام طراحی مفسر ۳) تمرینات نظری (۲۰% کل نمره)
- پروژه ( ۱۵% کل نمره)
مراجع
- D. P. Friedman, M. Wand. Essentials of Programming Languages. 3rd Edition, MIT Press, 2008.
- S. Krishnamurthi. Programming Languages: Application and Interpretation. 2nd Edition, 2017.
- M. Felleisen, R. B. Findler, M. Flatt, S. Krishnamurthi, E. Barzilay, J. McCarthy, S. Tobin-Hochstadt. A Programmable Programming Language. Communications of the ACM, Vol. 61, No. 3, Pp. 62-71, March 2018.