ScholarGate
دستیار

فراداده‌نویسی و ماکروها

فراداده‌نویسی برنامه‌ها را به عنوان داده‌ای در نظر می‌گیرد که برنامه‌های دیگر می‌توانند آن‌ها را تولید، بازرسی یا تبدیل کنند، در حالی که ماکروها انتزاع نحوی کنترل‌شده‌ای را در زمان کامپایل فراهم می‌کنند.

یافتن موضوع با PaperMindبه‌زودیFind papers & topics
Tools & resources
دریافت اسلایدها
Learn & explore
ویدیوبه‌زودی

Definition

فراداده‌نویسی (Metaprogramming) به معنای نوشتن برنامه‌هایی است که برنامه‌های دیگر (یا خودشان) را تولید، تحلیل یا تبدیل می‌کنند؛ ماکروها (macros) ابزاری برای فراداده‌نویسی هستند که نحو منبع را قبل یا در حین کامپایل به کد بسط‌یافته بازنویسی می‌کنند.

Scope

این موضوع به تکنیک‌هایی می‌پردازد که برنامه‌ها توسط آن‌ها برنامه‌های دیگر را دستکاری می‌کنند: ماکروهای لغوی و نحوی، بسط ماکروی بهداشتی، تولید کد در زمان کامپایل، برنامه‌نویسی چندمرحله‌ای، بازتاب (reflection) و سیستم‌های الگو. این مبحث به چگونگی گسترش نحو و انتزاعات یک زبان توسط این مکانیزم‌ها، ضمن حفظ صحت، به ویژه در مورد گرفتن و اتصال متغیرها، می‌پردازد.

Core questions

  • چگونه انتزاع نحوی می‌تواند یک زبان را بدون گرفتن نام ناامن گسترش دهد؟
  • چه چیزی فراداده‌نویسی زمان کامپایل را از بازتاب زمان اجرا متمایز می‌کند؟
  • چگونه برنامه‌نویسی چندمرحله‌ای تولید برنامه را از اجرا جدا می‌کند؟
  • چه زمانی فراداده‌نویسی انتزاع را بهبود می‌بخشد و چه زمانی به خوانایی و ابزارها آسیب می‌رساند؟

Key theories

بسط ماکروی بهداشتی
کوهلبکر و همکارانش ماکروهای بهداشتی را معرفی کردند که به طور خودکار متغیرهای مقید را در طول بسط تغییر نام می‌دهند تا کد تولید شده توسط ماکرو نتواند به طور تصادفی نام‌ها را در محل استفاده بگیرد یا توسط آن‌ها گرفته شود.
برنامه‌نویسی چندمرحله‌ای
طاها و شیارد محاسبات مرحله‌بندی شده را با حاشیه‌نویسی‌های صریح رسمی کردند و توضیحی نوع‌دار از تولید و اجرای کد در مراحل ارزیابی متمایز ارائه دادند.
فراداده‌نویسی الگو
شیارد و پیتون جونز فراداده‌نویسی زمان کامپایل نوع‌دار را به Haskell اضافه کردند که به برنامه‌ها اجازه می‌دهد نحو انتزاعی را در زمان کامپایل بسازند و به هم متصل کنند.

Clinical relevance

ماکروها و فراداده‌نویسی به نویسندگان کتابخانه‌ها اجازه می‌دهند تا انتزاعات خاص دامنه ایجاد کنند، کدهای تکراری را حذف کنند و تخصیص زمان کامپایل را برای بهبود عملکرد انجام دهند. بهداشت (Hygiene) و نظم مرحله‌بندی (staging discipline) عواملی هستند که این امکانات قدرتمند را برای استفاده روزمره به اندازه کافی ایمن می‌سازند.

History

ماکروها به اوایل زبان‌های Lisp و اسمبلی بازمی‌گردند، اما ماکروهای Lisp غیربهداشتی مستعد گرفتن تصادفی متغیرها بودند. بسط بهداشتی Kohlbecker در سال 1986 این مشکل را حل کرد و بر قواعد نحوی Scheme تأثیر گذاشت. کارهای بعدی برنامه‌نویسی چندمرحله‌ای (MetaML) را رسمی کردند و فراداده‌نویسی زمان کامپایل نوع‌دار را به زبان‌هایی مانند Haskell، Scala و Rust آوردند.

Debates

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

Key figures

  • Eugene Kohlbecker
  • Matthias Felleisen
  • Walid Taha
  • Tim Sheard
  • Simon Peyton Jones

Related topics

Seminal works

  • kohlbecker1986
  • taha2000
  • sheard2002
  • abelson1996

Frequently asked questions

چه چیزی یک سیستم ماکرو را بهداشتی می‌کند؟
یک سیستم ماکروی بهداشتی تضمین می‌کند که شناسه‌های معرفی شده توسط یک ماکرو به طور ناخواسته شناسه‌های موجود در محل فراخوانی را نگیرند یا پنهان نکنند، و بالعکس، با تغییر نام سیستماتیک متغیرهای مقید در طول بسط.
فراداده‌نویسی چه تفاوتی با توابع معمولی دارد؟
توابع معمولی بر روی مقادیر زمان اجرا عمل می‌کنند، در حالی که فراداده‌نویسی بر روی نمایش‌های برنامه عمل می‌کند، کد را تولید یا تبدیل می‌کند، اغلب در زمان کامپایل، قبل از اینکه هر مقدار زمان اجرایی وجود داشته باشد.

Methods for this concept

Related concepts