موضوع مقاله: فرابرنامه‌نویسی | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # فرابرنامه‌نویسی | مقدمه: فرابرنامه‌نویسی یک فن (تکنیکِ) برنامه‌نویسی است که در آن برنامه‌های رایانه‌ای می‌توانند سایر برنامه‌ها را به‌عنوان دادهٔ خود بپذیرند. | ## بخش 1: فرابرنامه‌نویسی | این بدان معناست که یک برنامه می‌تواند برای خواندن، تولید، تحلیل یا تبدیل برنامه‌های دیگر و حتی اصلاح خود در حین اجرا طراحی شود. در بعضی موارد، این به برنامه‌نویسان اجازه می‌دهد تا تعداد خطوط کد را برای بیان راه‌حل به حداقل برسانند، به نوبه خود زمان توسعه را کاهش می‌دهد. این برنامه همچنین با انعطاف‌پذیری بیشتر به برنامه‌ها امکان می‌دهد تا به‌طور مؤثری با شرایط جدید و بدون جبران مجدد رفتار کنند. فرابرنامه‌نویسی می‌تواند برای جابه‌جایی محاسبات از زمان اجرا به زمان کامپایل، تولید کد با استفاده از محاسبات زمان کامپایل و فعال کردن کد اصلاح شده خود استفاده شود. به زبان برنامه‌هایی که دستکاری می‌شوند، زبان برنامه‌نویسی ویژگی‌گرا گفته می‌شود. توانایی یک زبان برنامه‌نویسی برای فرازبان بودن، خود بازتاب یا «انعطاف‌پذیری» نامیده می‌شود. فرابرنامه‌نویسی در دهه‌ی ۱۹۷۰ و ۱۹۸۰ با استفاده از زبانهای پردازش لیست مانند LISP رایج شد. دستگاه‌های سخت‌افزاری LISP در دهه ۱۹۸۰ محبوب بودند و برنامه‌هایی را ایجاد می‌کردند که می‌توانند کد را پردازش کنند. آنها اغلب برای برنامه‌های هوش مصنوعی استفاده می‌شدند فرابرنامه‌نویسی به توسعه‌دهندگان امکان می‌دهد برنامه‌هایی را بنویسند و کدی را بسازند که در الگوی برنامه‌نویسی عمومی قرار دارد. | ## بخش 2: فرابرنامه‌نویسی | برنامه‌نویسی عمومی با اجازه دادن به شخصی برای نوشتن کد بدون نگرانی در تعیین انواع داده‌ها، امکاناتی برای فرابرنامه‌نویسی را در یک زبان ممکن می‌کند؛ زیرا در هنگام استفاده می‌توان آنها را به‌عنوان پارامتر فرض کرد. رویکردها فرابرنامه نویسی معمولاً به یکی از سه روش انجام می‌شود: اولین رویکرد، در معرض قرار دادن داخلی موتور زمان اجرا در کد برنامه‌نویسی از طریق برنامه رابط‌های برنامه‌نویسی (API) مانندIL emitter برای .net رویکرد دوم اجرای پویا عباراتی است که حاوی دستورها برنامه‌نویسی است، که اغلب از رشته‌ها تشکیل شده‌اند، اما می‌تواند از سایر روش‌ها با استفاده از آرگومان یا متن مانند جاوا اسکریپت نیز باشد؛ بنابراین، «برنامه‌ها می‌توانند برنامه بنویسند.» اگرچه هر دو روش می‌توانند به زبان مشابه مورد استفاده قرار گیرند، اما اکثر زبان‌ها به سمت یکی یا دیگری گرایش دارند. سیستم‌های کلی تبدیل برنامه هدف مانند کامپایلرها، که توصیف‌های زبان را می‌پذیرند و تحولات دلخواه را بر روی آن زبانها انجام می‌دهند، پیاده‌سازی مستقیم فرابرنامه نویسی عمومی هستند. این اجازه می‌دهد تا فرابرنامه نویسی برای هر زبان هدف تقریباً بدون توجه به اینکه آیا آن زبان مقصد دارای توانایی‌های فرابرنامه نویسی است، اعمال شود. می‌توان این را در محل کار با Scheme مشاهده کرد و اینکه چگونه می‌توان با استفاده از ساختارهایی که بخشی از خود زبان Scheme برای گسترش C بودند، با محدودیت‌هایی که در C قرار دارد، مقابله کرد. با این وجود، یک برنامه‌نویس می‌تواند این فرابرنامه را در کمتر از یک دقیقه بنویسد و اجرا کند، و دقیقاً ۱۰۰۰ خط کد را در همین زمان ایجاد می‌کند. کویین(quine) نوع خاصی از فرابرنامه است که سورس کد خود را به عنوان خروجی تولید می‌کند. لیسپ احتمالاً زبان مهمی با امکانات فرابرنامه نویسی است، هم به دلیل تقدم تاریخی و هم به دلیل سادگی و قدرت فرابرنامه نویسی آن. به فرم‌های ارزیابی خود و نقل قول در Lisp مراجعه کنید؛ بنابراین، زبان فرابرنامه نویسی با زبان برنامه‌نویسی میزبان یکسان است و روال‌های موجود Lisp در صورت دلخواه می‌توانند مستقیماً برای برنامه‌نویسی مجدد استفاده شوند. | ## بخش 3: فرابرنامه‌نویسی | این رویکرد با درج مترجم در برنامه، که مستقیماً با داده‌های برنامه کار می‌کند، به زبانهای دیگر پیاده‌سازی شده‌است. پشتیبانی و چالش‌ها یکی از سبک‌های فرابرنامه نویسی استفاده از زبانهای دامنه خاص (DSL) است. یک مثال نسبتاً متداول از استفاده از DSLها شامل برنامه‌نویسی مولد است: lex و yacc، دو ابزاری که برای تولید آنالیزور واژگانی و تجزیه گر استفاده می‌شود، به کاربر اجازه می‌دهیم زبان را با استفاده از عبارات منظم و گرامرهای بدون محتوا توصیف کند و الگوریتم‌های پیچیده‌ای را که برای تجزیه و تحلیل مؤثر زبان کار می‌کند، توصیف کند. یکی از مزایای فرابرنامه نویسی این است که به محض پشت سر گذاشتن قرارداد در مرحله پیکربندی در یادگیری، بهره‌وری توسعه دهندگان را افزایش می‌دهد. برخی استدلال می‌کنند که یک پیچیدگی عمیق یادگیری برای استفاده کامل از ویژگی‌های فرابرنامه نویسی وجود دارد. از آنجا که فرابرنامه نویسی انعطاف‌پذیری و قابلیت تنظیم بیشتری در زمان اجرا ایجاد می‌کند، سوءاستفاده یا استفاده نادرست از فرا برنامه‌نویسی می‌تواند منجر به خطاهای غیرمجاز و غیرمنتظره ای شود که می‌تواند برای یک توسعه دهنده متوسط دشوار باشد. این امر می‌تواند خطرات موجود در سیستم را ایجاد کرده و در صورت عدم مراقبت، آن را آسیب پذیرتر کند. برخی از مشکلات رایج که به دلیل استفاده نادرست از برنامه‌نویسی برنامه نویسی ایجاد می‌شود، عدم توانایی کامپایلر در شناسایی پارامترهای پیکربندی گمشده، داده‌های نامعتبر یا نادرست می‌توانند منجر به استثناء ناشناخته یا نتایج مختلف شوند. | ## جمع‌بندی | به همین دلیل، برخی معتقدند که فقط توسعه دهندگان با مهارت بالا باید روی توسعه ویژگی‌هایی کار کنند که فرابرنامه نویسی را با یک زبان یا پلتفرم انجام می‌دهند و توسعه دهندگان متوسط باید یاد بگیرند که چگونه از این ویژگی‌ها به عنوان بخشی از قرارداد استفاده کنند.