پارادایمهای زبان
پارادایمهای برنامهنویسی، سبکهای بنیادی هستند که نحوه بیان محاسبات را سازماندهی میکنند، از تغییر حالت دستوری (imperative state mutation) گرفته تا مدلهای تابعی، منطقی و اعلانی.
Definition
پارادایم برنامهنویسی مجموعهای منسجم از مفاهیم و اصول ساختاردهی برای سازماندهی محاسبات در یک زبان است که واحدهای اساسی یک برنامه (دستورات، عبارات، اشیاء، روابط) و نحوه ترکیب آنها را تعریف میکند.
Scope
این حوزه پارادایمهای اصلی زبانهای برنامهنویسی و مدلهای محاسباتی زیربنایی آنها را پوشش میدهد: برنامهنویسی دستوری و شیگرا که بر اساس حالت تغییرپذیر و ارسال پیام ساخته شدهاند؛ برنامهنویسی تابعی که بر اساس ارزیابی عبارت و توابع مرتبه بالاتر ساخته شده است؛ برنامهنویسی منطقی و محدودیتگرا که بر اساس روابط و جستجو ساخته شده است؛ و فرابرنامهنویسی (metaprogramming) که در آن برنامهها، برنامههای دیگر را دستکاری میکنند. این بخش به بررسی چگونگی شکلدهی پارادایمها به طراحی زبان، مصالحههایی که آنها در بر میگیرند، و چگونگی ترکیب آنها در زبانهای چندپارادایمی مدرن میپردازد.
Sub-topics
Core questions
- چه چیزی یک پارادایم را از دیگری متمایز میکند و آیا این تمایزات واضح هستند یا صرفاً تأکیدی؟
- پارادایمها چگونه بر صحت برنامه، پیمانهبندی و استدلال تأثیر میگذارند؟
- آیا سبکهای دستوری و اعلانی میتوانند متحد شوند و با ترکیب آنها چه چیزی به دست میآید یا از دست میرود؟
- مدل محاسباتی زیربنایی (ماشین فون نویمان، حساب لامبدا، رزولوشن) چگونه بر یک پارادایم تأثیر میگذارد؟
Key theories
- برنامهنویسی تابعی به عنوان جبر برنامهها
- بکوس استدلال کرد که برنامهنویسی تابعی و مبتنی بر ترکیبکننده، زبانها را از تنگنای فون نویمان با ارائه جبر قوانین معادلهای برای استدلال و تبدیل، رها میکند.
- الگوریتم = منطق + کنترل
- جداسازی کوالسکی بین مشخصات منطقی یک مسئله و استراتژی کنترلی مورد استفاده برای حل آن، پارادایم اعلانی/منطقی را پایهگذاری میکند و آنچه را که آن را از کد رویهای متمایز میکند، روشن میسازد.
- چارچوب زبان هسته چندپارادایمی
- ون روی و هاریدی پارادایمها را به عنوان بسطهای افزایشی یک زبان هسته کوچک ارائه میدهند و نشان میدهند که چگونه مفاهیمی مانند حالت، همزمانی و تنبلی را میتوان اضافه یا حذف کرد تا هر پارادایم بازیابی شود.
Clinical relevance
انتخاب پارادایم پیامدهای عملی برای مهندسی نرمافزار دارد: سبکهای تابعی و اعلانی به استدلال معادلهای، قابلیت آزمایش و موازیسازی کمک میکنند، در حالی که تجزیه شیگرا از پیمانهبندی در مقیاس بزرگ پشتیبانی میکند. زبانهای مدرن به طور فزایندهای پارادایمها را با هم ترکیب میکنند، بنابراین درک مصالحههای آنها به انتخاب زبان و طراحی اصولی کمک میکند.
History
برنامهنویسی دستوری از معماری فون نویمان با برنامه ذخیرهشده و زبانهای اولیه مانند فرترن و الگول نشأت میگیرد. لیسپ (۱۹۵۸) ایدههای تابعی ریشهدار در حساب لامبدا را معرفی کرد. دهه ۱۹۷۰ شاهد برنامهنویسی منطقی (پرولوگ) و ظهور برنامهنویسی ساختاریافته و سپس شیگرا (سیمولا، اسمالتاک) بود. سخنرانی جایزه تورینگ بکوس در سال ۱۹۷۷ انتقاد تابعی از سبک دستوری را متبلور کرد و دهههای بعدی زبانهای چندپارادایمی فزایندهای را تولید کردند.
Debates
- دستوری در مقابل اعلانی به عنوان اصل سازماندهی اولیه
- بحثی طولانیمدت، صراحت و کنترل عملکرد کد دستوری را در برابر مزایای استدلال و ترکیبپذیری سبکهای اعلانی و تابعی میسنجد؛ اکثر زبانهای مدرن با پشتیبانی از هر دو، این مسئله را حل میکنند.
Key figures
- John Backus
- Robert Kowalski
- Peter Van Roy
- Harold Abelson
- Gerald Jay Sussman
Related topics
Seminal works
- backus1978
- kowalski1979
- vanroy2004
- abelson1996
Frequently asked questions
- آیا برنامهنویسی شیگرا یک پارادایم جداگانه از برنامهنویسی دستوری است؟
- برنامهنویسی شیگرا معمولاً به عنوان یک رشته ساختاردهی در نظر گرفته میشود که بر روی پارادایم دستوری قرار گرفته است: این پارادایم حالت تغییرپذیر را در اشیاء با رفتار کپسولهشده سازماندهی میکند، اما همچنان به تغییر حالت و توالی وابسته است.
- آیا پارادایمها متقابلاً انحصاری هستند؟
- خیر. بسیاری از زبانهای پرکاربرد چندپارادایمی هستند و ویژگیهای تابعی، شیگرا و دستوری را ترکیب میکنند تا برنامهنویسان بتوانند مناسبترین سبک را برای هر کار انتخاب کنند.