موضوع مقاله: مشخصات زبان برنامه‌نویسی | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # مشخصات زبان برنامه‌نویسی | مقدمه: در برنامه نویسی کامپیوتر ، مشخصات زبان برنامه نویسی (یا استاندارد یا تعریف ) یک مصنوع مستندسازی است که یک زبان برنامه نویسی را تعریف می کند تا کاربران و مجریان بتوانند در مورد معنای برنامه های آن زبان توافق کنند. | ## بخش 1: مشخصات زبان برنامه‌نویسی | مشخصات معمولاً جزئی و رسمی هستند و عمدتاً توسط مجریان استفاده می‌شوند و کاربران در صورت ابهام به آنها مراجعه می‌کنند. اسناد مرتبط شامل یک مرجع زبان برنامه نویسی است که به صراحت برای کاربران در نظر گرفته شده است، و یک منطق زبان برنامه نویسی، که توضیح می دهد که چرا مشخصات همانطور که هست نوشته شده است. استانداردسازی همه زبان‌های برنامه‌نویسی اصلی دارای مشخصات نیستند و زبان‌ها می‌توانند برای چندین دهه بدون مشخصه وجود داشته باشند و محبوب باشند. یک زبان ممکن است یک یا چند پیاده سازی داشته باشد که رفتار آنها به عنوان یک استاندارد عملی عمل می کند، بدون اینکه این رفتار در یک مشخصات مستند شده باشد. این به این دلیل است که پیاده‌سازی‌ها و مشخصات بررسی‌هایی را روی یکدیگر ارائه می‌کنند: نوشتن یک مشخصات مستلزم بیان دقیق رفتار یک پیاده‌سازی است و پیاده‌سازی بررسی می‌کند که یک مشخصه ممکن، عملی و سازگار است. از ALGOL 68 (1968) تا حد زیادی از نوشتن مشخصات قبل از پیاده سازی به دلیل مشکلات غیرمنتظره در پیاده سازی زمانی که پیاده سازی به تعویق افتاده است اجتناب شده است. با این حال، زبان‌ها هنوز هم گاهی اوقات پیاده‌سازی می‌شوند و بدون مشخصات رسمی محبوبیت پیدا می‌کنند: یک پیاده‌سازی برای استفاده ضروری است، در حالی که یک ویژگی مطلوب است اما ضروری نیست (به طور غیررسمی، "گفتگوهای کد"). فرم ها مشخصات زبان برنامه نویسی می تواند اشکال مختلفی داشته باشد، از جمله: تعریفی صریح از نحو و معناشناسی زبان. در حالی که نحو معمولاً با استفاده از یک دستور زبان رسمی مشخص می شود، تعاریف معنایی ممکن است به زبان طبیعی (مثلاً رویکرد اتخاذ شده برای زبان C ) یا یک معناشناسی رسمی (مثلاً مشخصات استاندارد ML و Scheme ) نوشته شود. یک مثال قابل توجه زبان C است که بدون مشخصات رسمی محبوبیت پیدا کرد، در عوض به عنوان بخشی از یک کتاب، زبان برنامه نویسی C (1978) توصیف شد، و خیلی بعد به طور رسمی در ANSI C (1989) استاندارد شد. توصیفی از رفتار یک کامپایلر (که گاهی اوقات "مترجم" نامیده می شود) برای زبان (به عنوان مثال، زبان C++ و Fortran ). نحو و معنای زبان باید از این توصیف استنتاج شود، که ممکن است به زبان طبیعی یا رسمی نوشته شود. پیاده سازی مدل ، که گاهی اوقات به زبانی که مشخص می شود نوشته می شود (به عنوان مثال، Prolog ). نحو نحو یک زبان برنامه نویسی بیانگر تعریف کلمات قابل قبول است، به عنوان مثال، پارامترهای رسمی و قوانینی که بر اساس آن تصمیم می گیریم آیا یک کد داده شده در رابطه با زبان معتبر است یا خیر. با توجه به این نکته، نحو زبان معمولاً از ترکیبی از سه مؤلفه ساخت زیر تشکیل شده است: مجموعه کاراکترهای خاص (مجموعه نمادهای غیر خالی و محدود) عبارات منظم که واژگان آن را توصیف می کند (برای نشانه گذاری بر اساس الفبا) یک دستور زبان بدون متن که نحوه ترکیب واژگان را برای ایجاد یک برنامه صحیح توضیح می دهد. با این حال، نمایش رسمی مؤلفه های ذکر شده در بالا معمولاً بخشی از بخش است زیرا به نفع اجرا و تأیید زبان و مفاهیم آن است. | ## بخش 2: مشخصات زبان برنامه‌نویسی | معناشناسی فرموله کردن یک معناشناسی دقیق از یک زبان برنامه نویسی بزرگ، پیچیده و کاربردی حتی برای متخصصان باتجربه یک کار دلهره آور است و درک مشخصات به دست آمده برای هر کسی جز متخصصان می تواند دشوار باشد. در زیر برخی از روش هایی که در آنها می توان معناشناسی زبان برنامه نویسی را توصیف کرد آمده است. همه زبان‌ها حداقل از یکی از این روش‌های توصیفی استفاده می‌کنند و برخی از زبان‌ها بیش از یکی را ترکیب می‌کنند. در حالی که تعداد کمی از مشخصات زبان به این شکل شروع می شوند، تکامل برخی از مشخصات زبان تحت تأثیر معنایی یک مجموعه آزمایشی قرار گرفته است (به عنوان مثال، در گذشته مشخصات Ada برای مطابقت با رفتار مجموعه آزمون ارزیابی انطباق Ada اصلاح شده است). زبان طبیعی بیشتر زبان‌های پرکاربرد با استفاده از توصیف‌های زبان طبیعی از معناشناسی آنها مشخص می‌شوند. عدم دقت زبان طبیعی به عنوان وسیله ای برای توصیف معنایی زبان برنامه نویسی می تواند منجر به مشکلاتی در تفسیر مشخصات شود. به عنوان مثال، معنای رشته‌های جاوا به زبان انگلیسی مشخص شد و بعداً مشخص شد که این مشخصات، راهنمایی کافی برای پیاده‌کننده‌ها ارائه نمی‌کند. با این حال، توضیحات تکمیلی زبان طبیعی از معناشناسی اغلب برای کمک به درک تعاریف رسمی گنجانده شده است. زبان های برنامه نویسی که معنایی آنها به طور رسمی توضیح داده می شود می توانند از مزایای بسیاری برخوردار شوند. معناشناسی رسمی طراحی سیستم های نوع و اثبات درستی آن نوع سیستم ها را تسهیل می کند. معناشناسی رسمی می تواند استانداردهای یکسان و بدون ابهام را برای پیاده سازی یک زبان ایجاد کند. برای مثال، یک اثبات‌کننده یا بررسی‌کننده قضیه خودکار می‌تواند اعتماد برنامه‌نویس (یا طراح زبان) را نسبت به صحت اثبات‌های مربوط به برنامه‌ها (یا خود زبان) افزایش دهد. قدرت و مقیاس پذیری این ابزارها بسیار متفاوت است: تأیید رسمی کامل از نظر محاسباتی فشرده است، به ندرت فراتر از برنامه های حاوی چند صد خط است. بسیاری از کامپایلرها چک های نوع استاتیک را برای هر برنامه ای که کامپایل می کنند اعمال می کنند. پیاده سازی مرجع پیاده سازی مرجع یک پیاده سازی واحد از یک زبان برنامه نویسی است که به عنوان معتبر تعیین شده است. رفتار این پیاده سازی برای تعریف رفتار مناسب یک برنامه نوشته شده در زبان برگزار می شود. | ## بخش 3: مشخصات زبان برنامه‌نویسی | اولاً، دقیق است و نیازی به تفسیر انسانی ندارد: اختلافات مربوط به معنای یک برنامه را می توان به سادگی با اجرای برنامه در اجرای مرجع حل و فصل کرد (به شرطی که اجرا برای آن برنامه رفتار قطعی داشته باشد). از سوی دیگر، تعریف معناشناسی زبان از طریق پیاده سازی مرجع نیز دارای چندین اشکال بالقوه است. مهمترین آنها این است که محدودیت های پیاده سازی مرجع را با ویژگی های زبان ترکیب می کند. به عنوان مثال، اگر پیاده سازی مرجع دارای یک اشکال باشد، آن باگ باید به عنوان یک رفتار معتبر در نظر گرفته شود. اشکال دیگر این است که برنامه هایی که به این زبان نوشته می شوند ممکن است به ویژگی های عجیب و غریب در پیاده سازی مرجع متکی باشند که مانع از قابلیت حمل در پیاده سازی های مختلف می شود. در مورد Perl، مدل منبع باز توزیع نرم‌افزار به این واقعیت کمک کرده است که هیچ‌کس تا به حال پیاده‌سازی دیگری از زبان را تولید نکرده است، بنابراین مسائل مربوط به استفاده از پیاده‌سازی مرجع برای تعریف معنایی زبان بحث‌انگیز است. مجموعه تست تعریف معنایی یک زبان برنامه نویسی در قالب یک مجموعه آزمایشی شامل نوشتن تعدادی برنامه نمونه در زبان، و سپس توصیف نحوه رفتار آن برنامه ها - شاید با نوشتن خروجی های صحیح آنها است. سپس هر پیاده سازی صحیح زبان باید دقیقاً خروجی های صحیح را در برنامه های مجموعه آزمایشی تولید کند. مزیت اصلی این رویکرد برای توصیف معنایی این است که به راحتی می توان تشخیص داد که آیا پیاده سازی زبان یک مجموعه آزمایشی را می گذراند یا خیر. کاربر می تواند به سادگی تمامی برنامه های مجموعه آزمایشی را اجرا کند و خروجی ها را با خروجی های مورد نظر مقایسه کند. با این حال، هنگامی که به تنهایی مورد استفاده قرار می گیرد، رویکرد مجموعه آزمایشی دارای اشکالات عمده ای نیز می باشد. به عنوان مثال، کاربران می خواهند برنامه های خود را اجرا کنند که بخشی از مجموعه آزمایشی نیستند. در واقع، پیاده سازی زبانی که فقط می تواند برنامه های مجموعه آزمایشی خود را اجرا کند، تا حد زیادی بی فایده خواهد بود. اما یک مجموعه آزمایشی به خودی خود توضیح نمی دهد که پیاده سازی زبان در هر برنامه ای که در مجموعه آزمایشی نیست چگونه باید عمل کند. تعیین آن رفتار مستلزم برون یابی از سوی اجراکننده است و اجراکننده های مختلف ممکن است مخالف باشند. علاوه بر این، مجموعه آزمایشی نمی‌تواند به راحتی رفتاری را که در نظر گرفته شده یا مجاز است غیرقطعی باشد، آزمایش کند. | ## جمع‌بندی | بنابراین، در عمل متداول، مجموعه‌های آزمایشی تنها در ترکیب با یکی از تکنیک‌های مشخصه زبان دیگر، مانند توصیف زبان طبیعی یا پیاده‌سازی مرجع استفاده می‌شوند.