طراحی زبانهای برنامهسازی
Design of Programming Languages
مقطع: کارشناسی | گرایش: نرمافزار |
نوع درس: نظری | تعداد واحد: ۳ |
پیشنیاز: برنامهسازی پیشرفته | همنیاز: – |
هدف کلی
این درس در نظر دارد تا بینشی دربارهی الگوهای برنامهنویسی مختلف، مفاهیم زبانهای برنامهنویسی مختلف و کارایی آنها و همچنین تاریخچه و پیادهسازی آنها برای دانشجویان به وجود آورد. از آنجا که نیازمندیهای زبانهای برنامهنویسی برای دستگاههای محاسباتی امروزه مانند PDA ها (که در آنها حافظه و CPU محدود است) همانند دستگاههای ابتدایی است، در این درس دانشجویان با تاریخچهی زبانهای برنامهنویسی آشنا خواهند شد. این موضوع به دانشجویان کمک خواهد کرد تا کارآییهای یک زبان را فارغ از محدودیتهای دستگاههای محاسباتی، درک کنند. یادگیری مفاهیم و قابلیتهای برنامهنویسی به دانشجویان کمک میکند که ویژگیهای یک زبان را از کنار هم قرار دادن قابلیتهای آن استنتاج کنند و در نتیجه زبانهای جدید را راحتتر فراگیرند و از قابلیت آنها بهتر استفاده نمایند. همچنین هزینه هر قابلیت زبان را درک کنند و در انتخاب زبان برنامهنویسی برای هر کاربرد خاص، انتخاب بهتری از میان گزینهها با توجه به روش برنامهسازی و نیازهای برنامهنویسی داشته باشند.
سرفصلها
- مقدمهای بر الگوهای برنامهنویسی و دستهبندی آنها
- دستهبندی الگوی زبانهای برنامهنویسی: توصیفی (رویهای-شیگرا)، امری (منطقی)
- تاریخچهی زبانهای برنامهنویسی: Cobol, Algol 60, Algol 68, Pascal, Modula B, C, LISP, ML, Simula, Smalltalk و مقایسهی آنها
- قدرت بیانگری زبانهای برنامهنویسی و نظریهی محاسباتی
- برنامهنویسی تابعی
- محاسبات لامبدا (Lamba calculus) و مقدمهای بر زبان LISP
- مقدمه ای بر ML (یا یک زبان تابعی مشابه مانند Haskell یا JavaScript)
- چک کردن نوع
- چک کردن نوع پویا/ایستا
- چک کردن نوع استنتاجی و آشکار
- مفهوم کلاس نوع در Haskell ( برای کنترل کردن overloading explosion)
- انواع Polymorphism و قالبها در C++ [اختیاری : Trait]
- مدیریت گستره
- زبان با ساختار بلوکی و استک زمان اجرا
- پیادهسازی بلوکهای تودرتو و لینکهای کنترل
- پیادهسازی توابع مرتبه اول و لینکهای دسترسی و بهینهسازی (tail recursion)
- پیادهسازی توابع مرتبه بالاتر و closure
- ساختارهای کنترلی و پیادهسازی آنها
- exception و exception-handling
- Continuation و کاربردهای آن در هستههای سیستمعاملها و کامپایلرها
- Monads [اختیاری]
- پیمانهای بودن در زبانهای برنامهنویسی
- مفاهیم ( interface، specification و پیادهسازی)
- مجردسازی داده و روش
- تجرید عمومی، پیمانهای بودن در ML
- زبانهای شیءگرا
- خصوصیات زبانهای شیءگرا: کپسولهسازی، جستجوی پویا، subtyping و وراثت
- بررسی رویکرد زبانها مانند Smalltalk، Simula، C++ و جاوا در پیادهسازی خصوصیات شیگرایی: مزایا و معایبی مانند چند وراثتی در C++، اجرای پویا در Java و …
- زبانهای همروند و توزیعشده
- مدل Actor و زبانهای مبتنی بر اکتور
- همروندی در ML (مبتنی بر کانال)
- ریسمان در Java
- زبان اعلانی مبتنی بر منطق [اختیاری]
ارزیابی پیشنهادی
- آزمون میانترم: ۳۰٪
- آزمون پایانترم: ۴۰٪
- کوئیز: ۱۰٪
- تکلیف و پروژه: ۲۰٪
منابع پیشنهادی
- J. Mitchell. Concepts in Programming Languages. Cambridge university press, 2004.
- M. Scott. Programming Language Pragmatics. 4th Edition, Morgan Kaufmann Publishers, 2015
- D. P. Friedman and M. Wand. Essentials of Programming Languages. 3rd Edition, MIT Press, 2008.
- M. Gabbrielli and S. Martini. Programming languages: principles and paradigms. 2nd Edition, Springer, 2023.