تئوری زبان برنامه نویسی

**<big>''[[نظریه زبان‌های برنامه‌نویسی]] (PLT)''</big>** شاخه‌ای از علوم کامپیوتر است که به طراحی، پیاده‌سازی، تحلیل، توصیف و دسته‌بندی زبان‌های رسمی که به عنوان زبان‌های برنامه‌نویسی شناخته می‌شوند، می‌پردازد. این حوزه ارتباط نزدیکی با سایر رشته‌ها از جمله ریاضیات، مهندسی نرم‌افزار و زبان‌شناسی دارد. در این زمینه، کنفرانس‌ها و مجلات علمی متعددی برگزار و منتشر می‌شوند.

## '''''<big>تاریخچه</big>'''''
به‌نوعی، تاریخچه نظریه زبان‌های برنامه‌نویسی حتی به قبل از توسعه خود زبان‌های برنامه‌نویسی بازمی‌گردد. حساب لامبدا، که در دهه ۱۹۳۰ توسط آلونزو چرچ و استیون کول کلینی توسعه یافت، از دید برخی به‌عنوان اولین زبان برنامه‌نویسی جهان شناخته می‌شود، هرچند هدف اصلی آن مدل‌سازی محاسبات بود، نه فراهم کردن روشی برای برنامه‌نویسان جهت توصیف الگوریتم‌ها برای یک سیستم کامپیوتری. بسیاری از زبان‌های برنامه‌نویسی تابعی مدرن به‌عنوان ارائه‌دهنده «یک لایه نازک» بر روی حساب لامبدا توصیف شده‌اند و بسیاری از آن‌ها را می‌توان به‌سادگی در قالب این حساب شرح داد.

اولین زبان برنامه‌نویسی که ابداع شد، **Plankalkül** بود که توسط **[[کنراد تسوزه|کنراد تسه]]** در دهه ۱۹۴۰ طراحی شد. با این حال، این زبان تا سال ۱۹۷۲ به‌صورت عمومی شناخته نشد و اولین پیاده‌سازی آن نیز تا سال ۱۹۹۸ انجام نگرفت. اولین زبان برنامه‌نویسی سطح بالا که به‌طور گسترده شناخته شد و موفقیت‌آمیز بود، **[[فرترن|FORTRAN]]** (مخفف Formula Translation) بود که بین سال‌های ۱۹۵۴ تا ۱۹۵۷ توسط تیمی از پژوهشگران IBM به رهبری **[[جان باکوس|جان بکوس]]** توسعه یافت. موفقیت FORTRAN باعث شد کمیته‌ای از دانشمندان برای طراحی یک زبان رایانه‌ای "جهانی" تشکیل شود؛ نتیجه این تلاش، زبان **ALGOL 58** بود.

به‌طور مستقل، **[[جان مک‌کارتی (دانشمند علوم رایانه)|جان مک‌کارتی]]** از مؤسسه MIT، زبان **[[لیسپ|Lisp]]** را توسعه داد که اولین زبان با ریشه‌های آکادمیک بود که موفقیت چشمگیری به دست آورد. با موفقیت این تلاش‌های اولیه، زبان‌های برنامه‌نویسی به یکی از موضوعات فعال پژوهشی در دهه ۱۹۶۰ و سال‌های بعد تبدیل شدند.

## '''زیرشاخه‌ها و حوزه‌های مرتبط'''
چندین حوزه مطالعاتی وجود دارند که یا در دل نظریه زبان‌های برنامه‌نویسی جای می‌گیرند یا تأثیر قابل‌توجهی بر آن دارند؛ بسیاری از این حوزه‌ها با یکدیگر هم‌پوشانی دارند.علاوه بر این، نظریه زبان‌های برنامه‌نویسی از شاخه‌های مختلف ریاضیات، مانند **[[نظریه محاسبات]]**، **[[نظریه رسته‌ها|نظریه دسته‌ها]]** و **[[نظریه مجموعه‌ها]]** بهره می‌گیرد.

### '''''[[معناشناسی صوری (زبان‌شناسی)|معناشناسی صوری]]'''''
معناشناسی صوری به مشخص‌سازی دقیق و رسمی رفتار برنامه‌ها و زبان‌های برنامه‌نویسی می‌پردازد. سه رویکرد رایج برای توصیف معنا یا "مفهوم" یک برنامه کامپیوتری عبارت‌اند از:

* **معناشناسی دنوتاسیونال (Denotational Semantics):** در این روش، هر برنامه به یک موجودیت ریاضیاتی (مانند یک تابع یا مجموعه) نگاشت می‌شود که رفتار آن را به‌طور انتزاعی توصیف می‌کند.
* **معناشناسی عملیاتی (Operational Semantics):** این روش رفتار برنامه را با تعریف گام‌به‌گام اجرای آن بر روی یک ماشین انتزاعی یا مدلی ساده‌شده، شبیه‌سازی می‌کند.
* **معناشناسی اصولی (Axiomatic Semantics):** در این رویکرد، معنا با استفاده از منطق صوری و از طریق مشخص کردن پیش‌شرط‌ها و پس‌شرط‌های منطقی برای برنامه‌ها تعریف می‌شود.

### '''[[نظریه نوع‌ها|''نظریه نوع‌ها'']]'''
نظریه نوع‌ها به مطالعه سیستم‌های نوع‌بندی می‌پردازد؛ سیستمی که به‌عنوان "یک روش نحوی قابل تحلیل برای اثبات نبود رفتارهای خاص در برنامه‌ها، از طریق دسته‌بندی عبارات بر اساس نوع مقادیری که محاسبه می‌کنند" تعریف می‌شود.

ویژگی‌های سیستم نوع‌بندی یکی از عواملی است که زبان‌های برنامه‌نویسی را از یکدیگر متمایز می‌کند. سیستم‌های نوع به زبان‌ها کمک می‌کنند تا خطاهای احتمالی را در زمان کامپایل شناسایی کرده و از برخی رفتارهای نامطلوب در برنامه‌ها جلوگیری کنند.