موضوع مقاله: برنامه‌نویسی خودآرا | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # برنامه‌نویسی خودآرا | مقدمه: برنامه‌نویسی خودآرا یک فن برنامه‌نویسی تواناست که در آن الگوریتم‌ها توسط یک همگردان(Compiler) به منظور به وجود آوردن یک کد موقتی به کار گرفته می‌شود، که توسط همگردان با بقیه کد ترکیب و سپس اجرا می‌شود. | ## بخش 1: برنامه‌نویسی خودآرا | خروجی این الگوریتم‌ها شامل ثابت‌های زمان اجرا، ساختارهای داده وتوابع کامل می‌باشد. این فن در تعدادی از زبان‌ها استفاده می‌شود که بهترین ومعروف‌ترین آنهاC++ و همچنین Curl, XL و D هستند. اگر چه از لحاظ تسهیلات زمان اجرا خیلی قدرتمند نیستند (به عنوان مثال lips macro اما بیرون از حوزهٔ این مقاله هستند. اجزا به‌کارگیری الگوریتم‌ها به عنوان یک فن برنامه‌نویسی خودآرا مستلزم دو عملگر بارز می‌باشد: یک الگوریتم باید تعریف شود ویک الگوریتم تعریف شده باید اعلان گردد. تعریف الگوریتم فرم کلی منبع کد تولید شده را شرح می‌دهد و نوسازی سبب تولید یک مجموعه کد خاص از شکل کلی در الگوریتم می‌شود. برنامه‌نویسی خودآرا یک تورینگ کامل است؛ یعنی اینکه هر محاسبه قابل بیانی می‌تواند توسط یک برنامه کامپیوتر در برخی اشکال با یک الگوریتم برنامه‌نویسی محاسبه گردد. الگوها با ماکروها متفاوتند، یک ماکرو(Macro)هم وسیله‌ای است برای زمان اجرا زبان وهم کد را به صورت کلی در یک خط اجرا و تعویض می‌کند. سیستم‌های ماکرو اغلب زمان اجرای پردازش را طبق قابلیت‌ها محدود کرده‌اند و معمولاً فاقد اطلاعات معنی و نوع سیستم زبان همراهشان می‌باشند. (باید یک مورد استثنا با لیسپ ماکروها ساخته شود که در خود لیسپ نوشته می‌شوند و دستکاری وتعویض کد لیسپ را درگیر کند) برنامه‌نویسی خود آرا هیچ متغیر نا پایداری ندارد یعنی اینکه هیچ متغیری نمی‌تواند مقدارش را در حالی که مقدار دهی شده است تغییر دهد؛ بنابراین برنامه‌نویسی خود آرا می‌تواند به عنوان شکل برنامه‌نویسی تابعی تلقی شود. _در واقع الگوی بیشتر فعالیت‌ها تنها در طول بازگشت، جریا ن کنترل را انجام می‌دهند. کاربرد اگر چه دستور زبان برنامه‌نویسی خود آرا با زبان برنامه‌نویسی که با آن نوشته می‌شود، بسیار متفاوت است اما استفاده‌های کاربردی دارد. | ## بخش 2: برنامه‌نویسی خودآرا | برخی از علل معمول برای کاربرد الگوها سبب اجرای برنامهٔ اصلی یا بهینه‌سازی زمان اجرا است و مثل اجرای چیزی به‌طور یک مرتبه در زمان بهتر از هر زمانی است که برنامه ادامه می‌یابد. زمان اجرای کلاس تولید برنامه‌نویسی در زمان اجرا دقیقاً چه معنی می‌شود، با یک مثال تابع فاکتوریل می‌تواند روشن شود که در هیچ‌یک از الگوهای C++نمی‌تواند مانند چیزی که درذیل آمده است، نوشته شود. فاکتوریل‌های استفاده شده در برنامه می‌تواند توسط کد زیر در حین اجرا محاسبه گردد. کد بالا مقدار فاکتوریل اعداد ۰و۴را حین اجرا محاسبه می‌کند و نتیجه‌هایی راکه از قبل به عنوان ثابت محاسبه شده بودند، استفاده می‌کند. به منظور امکان استفادهٔ الگوها در این روش باید کامپایلر (همگردان) مقدار متغیرهایش را حین اجرا بشناسد. چیزی که شرط اولیه وطبیعی را دارد، همان فاکتوریل X::اگر و تنها اگر Xدر حین اجراشناس باشد، به کار گرفته می‌شود. درC++11یک روش به منظور اجازه دادن به کامپایلر (همگردان) برای انجام عبارت‌های ساده و ثابت، اضافه شده بود. بهینه‌سازی کد زمان اجرا مثال فاکتوریل بالا نمونه‌ای از بهینه‌سازی کد زمان اجراست که در آن همهٔ فاکتوریل‌های به کار رفته توسط برنامه از قبل اجرا شده و به عنوان ثابت‌های شماره‌ای در اجرا ی برنامه تزریق می‌شود. (جایی که nدر زمان اجراشناس باشد) مزیت یک متغیر بیشتر مرسوم این است که حلقه‌ها می‌تواند باز شود و در بهینه‌سازی کد بسیار مؤثر است. چند ریختی ایستا چند ریختی یک ابزار برنامه‌نویسی استاندارد و رایج است، جایی که اشیا مشتق می‌تواند به عنوان نمونه شی اصلی استفاده شود، اما روش شی مشتق در کجا لازم می‌شود. این رفتار چندریختی پویا با ایجاد جدول‌های مراجعه‌ای مجازی برای کلاس‌هایی با شیوه‌های مجازی، رمز نگاری شده است. | ## بخش 3: برنامه‌نویسی خودآرا | (اگر چه در معماری‌های جدید اندک است) به هر حال در بسیاری از موارد رفتار چند ریختی در صورت لازم ثابت می‌شود و می‌تواند در زمان اجرا مصمم شود. سپس الگوی بازگشتی عجیب CRTP می‌تواند به منظور دستیابی به چند ریختی ثابت استفاده شود؛ که تقلیدی از چند ریختی در کد برنامه‌نویسی است. اما آن دوباره در حین اجرا حل می‌شود وهم چنین با جدول‌های مراجعه‌ای و مجازی زمان اجرا برطرف می‌شود. } }; در اینجا اساس الگوی کلاس مزیت واقعی را به دست می‌دهد؛ که بدنه‌های تابع عضو تا قبل از اعلانشان معرفی نمی‌شوند و آن عضوهای کلاس‌های مشتق را در طول تابع‌های عضو خودش توسط یک الگوی ثابت به کار خواهد گرفت، هم چنین در اجرای تولید ترکیب یک شی با کاراکترهای چند ریختی. برای مثال یک کاربرد در جهان واقعی ،CRTP در کتابخانهٔ گردش قیمت به کار گرفته می‌شود. مکانی که یک تابع رایج می‌تواند در کلاس اصلی جای بگیرد به عنوان یک قرارداد؛ استفاده نمی‌شود. مزیت‌ها و معایب برنامه‌نویسی خود آرا سبک و سنگین کردن زمان همگردانی در برابر زمان اجرا -اگر مقدار زیادی از یک برنامه‌نویسی خودآرا به کار گرفته شود، همگردانی (اجرا) ممکن است کند شود. قسمت ۱۴٫۷٫۱ از استاندارد رایج، توضیحات تحت‌الگوهای ضمنی و تعریف شده را شرح می‌دهد. تعریف یک الگو دلیل بر این نمی‌شود که آن الگو اعلان خواهد شد واعلان کردن الگوی یک کلاس باعث نمی‌شود تعریف‌های عضوش اعلان شوند. تولید برنامه، برنامه‌نویسی خودآرا به برنامه‌نویس اجازه می‌دهد روی معماری تمرکز کند. خوانایی با مراجعه بهC++ دستور و اصطلاحات برنامه‌نویسی خودآرا در مقایسه با قواید C++ مبهم هستند وبرنامه‌نویسی خودآرا می‌تواند برای فهم بسیار مشکل باشد. | ## جمع‌بندی | برنامه‌نویسی خودآرا برای نگهداری توسط برنامه نویسان ماهر در برنامه‌نویسی خودآرا نیز می‌تواند مشکل باشد.