| پارادایم‌های برنامه‌نویسی |
| --- |
| * زبان عملی
* عامل گرا
* آرایه‌گرا
* مبتنی بر اتوماتا
* رایانش همزمان
	+ نسبیت گرایی
* داده‌محور
* اعلانی (تضاد: دستوری)
	+ تابعی
		- منطق تابعی
		- تابعی خالص
	+ منطقی
		- منطقی قیاسی
		- مجموعه جواب
		- منطق همزمان
		- منطق تابعی
		- منطق استقرایی
	+ محدودیتی
		- منطق محدودیتی
			* منطق محدودیت همزمان
	+ جریان داده
		- مبتنی بر جریان
		- واکنشی
	+ هستی‌شناسی
* تشخیص پذیر
* پویا/اجرانامه‌نویسی
* رویدادمحور
* سطح تابع (تضاد: سطح مقدار)
	+ سبک بدون آرگومان
		- الحاقی
* همگانی
* دستوری (تضاد: اعلانی)
	+ رویه‌ای
	+ شیءگرا (OOP)
		- کد چندریخت
* تصمیم گرا
* زبان گرا
	+ خاص دامنه
* ادیبانه
* برنامه‌نویسی زبان طبیعی
* فرا برنامه‌نویسی
	+ خودکار
		- استقرایی
	+ پژواکی
		- صفت گرا
	+ مبتنی بر کلان‌دستور (ماکرو)
	+ خودآرا
* غیر ساخت‌یافته (تضاد: ساخت‌یافته)
	+ آرایه‌ای (برداری)
* غیرقطعی
* رایانش موازی
	+ فرایند گرا
* احتمالی
* کوانتمی
* نظریه مجموعه‌ها
* مبتنی بر پشته
* ساخت‌یافته (تضاد: غیر ساخت‌یافته)
	+ بلوک ساختاری
		- ساخت‌یافته همزمان
	+ شیءگرا (OOP)
		- مبتنی بر بازیگر
		- مبتنی بر کلاس
		- همزمان
		- بر پایه پیش‌نمونه
		- با تفکیک دغدغه‌ها:
			* جنبه‌گرا
			* نقش گرا
			* موضوع گرا
	+ بازگشتی
* نمادین
* سطح مقدار (تضاد: سطح تابع)
 |
| * ن
* ب
* و
 |

یک **ماکرو** (به انگلیسی: macro) در علوم رایانه یک الگو یا قاعده است که مشخص می‌کند چگونه بر اساس یک فرایند از قبل معین شده، یک ترتیب ورودی بخصوص (که معمولاً ترتیبی از نویسه‌ها هستند) باید به یک ترتیب خروجی جایگزین‌شده (که آن نیز معمولاً ترتیبی از نویسه‌ها می‌باشد) نگاشت (تناظر) یابد.

کلمهٔ ماکرو کوتاه شده عبارت «macroinstruction» به معنی «دستورات ماکرو» است. در زبان یونانی ماکرو (μακρός) به معنی «بزرگ یا کلان» (long) می‌باشد.

فرایندی نگاشتی که در آن «ماکروی استفاده شده» به یک «ترتیب خاص» نمونه‌برداری (تبدیل) می‌شود، به عنوان «گسترش ماکرو» شناخته می‌شود. امکانات نوشتن ماکرو می‌تواند به عنوان یک نرم‌افزار کاربردی یا بخشی از زبان برنامه‌نویسی فراهم شود. در حالت اول، از ماکروها برای ساخت فعالیت‌هایی به وسیلهٔ برنامه‌های کم تکرارتر استفاده می‌شد. در حالات دوم، آنها یک ابزاراند که برنامه‌نویس امکان استفاده مجدد از کد، یا حتی امکان طراحی زبان‌های خاص منظوره را می‌دهند.

از ماکرو برای فراهم ساختن ترتیبی از دستورالعمل‌های محاسباتی برای برنامه‌نویس، به صورت یک عبارت برنامه ای منفرد، استفاده می‌شود. استفاده از ماکروها باعث کمتر «مستعد خطر بودن» و «کمتر خسته‌کننده بودن» برنامه‌نویسی استفاده می‌شود. (از این جهت، به آن‌ها ماکرو می‌گویند، که یک بلاک «بزرگ» کد می‌تواند از یک ترتیب «کوچک» از نویسه‌ها گسترش بیابند). ماکروها اکثراً استفاده از پراسنجه‌های کلمه کلیدی یا موقعیتی (که مشخص می‌کنند که برنامهٔ اتصال شرطی چه چیزی را تولید می‌کند) را مجاز می‌داند و از آن‌ها برای ساخت برنامه‌های کامل یا مجموعه برنامه‌هایی برای سیستم عامل، سکوی رایانش، یا انواع دیگر برنامه استفاده می‌کند. عبارت «ماکرو» از «macro instruction» گرفته شده‌است، و از این گسترش‌ها در گذشته در اساس برای ساخت کدهای زبان اسمبلی استفاده می‌شد.

ماکروهای صفحه کلید و ماوس
-------------------------

 ویرایشگر ماژول jEdit
**ماکروهای صفحه کلید** و **ماکروهای** **ماوس** اجازه می‌دهد که توالی‌های کوتاهی از عملکردهای کلیدی و ماوس برای تبدیل شدن به توالی‌های کلیدی و اقدامات ماوس دیگر، معمولاً بیشتر وقت گیر باشند. به این صورت، استفاده‌های مکرر یا دنباله‌های تکراری از عملکردهای کلیدی و حرکت‌های موس می‌تواند به صورت خودکار انجام شود. برنامه‌های دیگر برای درست کردن این ماکروها را ضبظ کنندهٔ ماکرو می‌نامند.

در طول دهه ۱۹۸۰، برنامه‌های مارکرو - اول SmartKey، سپس SuperKey, KeyWorks, Prokey-ابتدا به عنوان وسیله ای برای فرمت خودکار صفحه نمایش، سپس برای انواع کارهای ورودی کاربر بسیار محبوب بودند. این برنامه‌ها بر اساس حالت عملیاتی TSR (خاتمه و اقامت) و بر روی تمام ورودی‌های صفحه کلید اعمال می‌شود، مهم نیست که در کدام زمینه رخ داده باشد. پس از ظهور واسط کاربر - و در دسترس بودن صفحه‌کلید و ماکروهای موس در برنامه‌های کاربردی مانند پردازشگرهای کلمه و صفحات گسترده، آن‌ها تا حدی در حال از بین رفتن هستند و امکان ایجاد ماکروهای صفحه کلید را برای کاربر ایجاد می‌کند.

\*\*ماکروهای صفحه کلید اخیراً به عنوان یک روش بهره‌برداری اقتصاد بازی‌های آنلاین نقش مهمی بازی چند نفره آنلاین (MMORPGs) زندگی می‌کنند. \*\*با انجام یک اقدام خسته‌کننده، تکراری، اما با ریسک پایین، بازیکنی که یک ماکرو را اجرا کند می‌تواند مقدار زیادی از پول رایج یا منابع را بدست آورد. این اثر حتی زمانی بزرگ‌تر است که یک بازیکن ماکرو با استفاده از حساب‌های گوناگونبه‌طور همزمان عمل می‌کند یا حساب‌ها را برای مدت‌زمان زیادی در هر روز انجام می‌دهد. از آنجا که این پول بدون دخالت انسان تولید می‌شود، می‌تواند به‌طور چشمگیریاقتصاد این بازی را واژگون کند به همین دلیل، استفاده از ماکرو نقض TOS یا EULA اکثر MMORPGها است و مدیران MMORPGها با جنگ دائمی برای شناسایی و مجازات کاربران کلان مبارزه می‌کنند.

### برنامه macros و اسکریپت نویسی

ماکروهای صفحه کلید و ماوس که با استفاده از ویژگی‌های کلیدی ساخته شده در برنامه ایجاد می‌شوند گاهی به نام **ماکرو برنامه شناخته می‌شوند**. آن‌ها با انجام دادن توالی زمانی و اجازه دادن به ثبت اعمال، ایجاد می‌شوند. یک زبان برنامه‌نویسی ماکرو، اغلب زبان اسکریپتی، با دسترسی مستقیم به ویژگی‌های برنامه ممکن است وجود داشته باشد.

ویرایشگر متن برنامه نویسان، Emacs (کوتاه شدهٔ «ویرایش ماکروها») از این ایده به نتیجه می‌رسد. در واقع بیشتر ویرایشگر از macros ساخته شده‌است.Emacs در ابتدا به عنوان یک مجموعه از ماکروها در زبان ویرایش TECO ابداع شد؛ بعدها به گویش lispمنتقل شد.

ویرایشگر متن برنامه نویسان دیگر، Vim (از نوادگان ششم)، نیز اجرای کامل ماکرو را دارد. این دستگاه می‌تواند در یک رجیستر (ماکرو) ثبت شود که چه کسی روی صفحه کلید قرار دارد و می‌تواند درست مانند VBA macros برای مایکروسافت تکرار یا ویرایش شود. Vim همچنین دارای یک زبان برنامه‌نویسی به نام Vimscript برای ایجاد ماکروها است.

ویژوال بیسیک برای برنامه‌های کاربردی (VBA) یک زبان برنامه‌نویسی است که در Microsoft Office از Office 97 از طریق Office 2019 موجود است (اگر چه در بعضی از اجزای Office قبل از Office 97 موجود بود). با این حال، عملکرد آن از زبان ماکرو شکل‌گرفته و جایگزین زبان‌های ماکرو شده‌است که در اصل در برخی از این برنامه‌ها گنجانده شده‌اند.

#### ویروس ماکرو

VBA به بسیاری از فراخوانی‌های سیستم ویندوز مایکروسافت دسترسی دارد و زمانی که اسناد بازمی‌شوند اجرا می‌شود. این موضوع نوشتن ویروس‌های کامپیوتری در VBA را نسبتاً آسان می‌کند، که معمولاً به عنوان ویروس‌های ماکرو شناخته می‌شوند. در اواسط تا اواخر دهه ۱۹۹۰، این نوع یکی از رایج‌ترین انواع ویروس‌های کامپیوتر شد. با این حال، در اواخر دهه ۱۹۹۰ و تا به امروز، مایکروسافت برنامه‌های خود را تعمیر و به روز کرده‌است. افزون بر این، برنامه‌های ضد ویروس فعلی فوراً چنین حملاتی را بی‌اثر می‌کنند.

ماکرو پارامتری
--------------

یک ماکرو پارامتری یک ماکرو است که می‌تواند اشیا داده‌شده را به بسط خود وارد کند. این به ماکرو مقداری از قدرت یک تابع را می‌دهد

یک مثال ساده، در زبان برنامه‌نویسی C، این ماکرو معمولی است *که* ماکرو پارامتری نیست:

```
 **#define** PI 3.14159
```

این باعث می‌شود رشته "PI" با "۳٫۱۴۱۵۹" جایگزین شود هر کجا که رخ دهد. این رشته همواره با این رشته جایگزین خواهد شد و ریسمان حاصل را نمی‌توان به هر نحوی تغییر داد. یک مثال از ماکروی پارامتری:

**#define** pred(x) ((x)-1)

حاصل تابع ماکرو بستگی به (x) ورودی آن دارد. چند مثال:

```
 pred (2) → ((۲) -۱÷
 pred (y + 2) → ((y + 2) -1)
 pred (f (5)) → ((f (5)) - 1)
```

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

ماکروهای پارامتری در زبان‌هایی مانند lisp, PL/I و Scheme استفاده می‌شود، از طرف دیگر، بسیار قدرتمندتر هستند و قادر به تصمیم‌گیری دربارهٔ آنچه که براساس استدلالات آن‌هاتولید می‌شود، هستند. از این رو، آن‌ها می‌توانند به‌طور مؤثر برای اجرای تولید کد زمانی استفاده شوند.

ماکروهای متن-جایگزین
--------------------

زبان‌هایی مانند C و برخی از زبان‌های مونتاژ دارای سیستم‌های کلان اولیه هستند که به عنوان پیش پردازنده‌های کامپایلر یا مونتاژکننده اجرا می‌شوند. ماکرو هایپیش پردازندهٔ C با جایگزینی متنی ساده در نشانه، به جای کاراکتر کار می‌کند. \*\*با این حال، امکانات ماکرو اسمبلرهای پیچیده‌تر، به عنوان مثال، IBM High Level Assembler (HLASM) با یک پیش پردازنده قابل اجرا نیست؛ کد مونتاژ دستورالعمل‌ها و داده‌ها با کد مونتاژ فراخوانی‌های کلان در هم آمیخته‌است. \*\* استفاده کلاسیک از ماکرو در سیستم تایپ کامپیوتری TeX و مشتقات آن است، که اکثر این قابلیت‌ها بر اساس ماکرو است. MacroML یک سیستم آزمایشی است که به دنبال تطبیق سیستم‌های تایپ دهی ایستا و سیستم‌های ماکرو است. Nemerle ماکروهای نحوی را تایپ کرده‌است و یکی از راه‌های کارآمد برای فکر کردن به این ماکروهای نحوی به عنوان یک محاسبه چند مرحله ای است. مثال‌های دیگر:

* M4 یک پردازنده مرکزی مستقل و پیشرفته است.
* TRAC
* TAL فرمت ماکرو، همراه با Attribute Language Template
* SMX: برای صفحات وب
* ML / 1 (زبان ماکرو)
* Macroprocessor عمومی منظور یک الگوی متنی است که با پردازشگر ماکرو منطبق است، که می‌تواند به عنوان ترکیبی از عبارات منظم، EBNF و AWK توصیف شود
* SAM76
* troff و nroff: برای تایپ کردن و قالب بندی صفحات یونیکس.
* CMS EXEC: برای ماکرو خط فرمان و ماکرو برنامه
* EXEC 2 در سیستم مانیتورینگ گفتگو (CMS): برای ماکرو خط فرمان و ماکروسافت برنامه
* CLIST در Time Sharing Option (TSO) IBM: برای ماکرو خط فرمان و ماکرو برنامه
* REXX: برای ماکرو خط فرمان و ماکروهای برنامه در، مانند، AmigaOS , CMS، OS / 2، TSO
* SCRIPT: برای قالب بندی اسناد
* پوسته‌های مختلف برای مثال، لینوکس

برخی از برنامه‌های اصلی به عنوان ماکرو متنی که توسط برنامه‌های دیگر به کار گرفته شده‌اند، به عنوان مثال، توسط XEDIT در CMS نوشته شده‌اند.

### زبان‌های قابل تعویض

بعضی از زبان‌ها مانند PHP می‌توانند در متن فرمت آزاد یا کد مبدأ زبان‌های دیگر تعبیه شوند. مکانیزمی که با آن قطعات کد شناسایی می‌شود (برای مثال، که با `<?php` و `?>`) شبیه به یک زبان ماکروی متنی است، اما آن‌ها بسیار قدرتمند و کاملاً برجسته هستند.

ماکروهای دستورالعمل
-------------------

ماکروها در زبان PL / I در یک زیر مجموعه از PL / I نوشته شده‌اند: کامپایلر "دستورات پیش پردازنده "را در زمان کامپایل اجرا می‌کند و خروجی این اجرا بخشی از کد تدوین‌شده توسط آن است. توانایی استفاده از یک زبان پردازشی به عنوان زبان ماکرو، بسیار بیشتر از زبان جایگزینی متن با هزینه یک کامپایلر بزرگ‌تر و کندتر است.

چارچوب ماکروهای Frame technology's دارای نحو فرماندهی خاص خود است، اما همچنین می‌تواند حاوی متن به هر زبانی باشد. هر فریم یک جز کلی در یک سلسله مراتب از زیر مجموعه‌های تودرتو و یک روش برای ادغام خود با چارچوب‌های فرعی خود (یک فرایند بازگشتی که تضادهای یکپارچه‌سازی را به نفع زیرمجموعه‌های سطح بالاتر حل می‌کند) است. خروجی‌ها اسناد سفارشی هستند، معمولاً ماژول‌های منبع کامپایل را دارند. تکنولوژی چارچوب می‌تواند از تکثیر قطعات مشابه اما بسیار متفاوت اجتناب کند، مسئله‌ای که از زمان اختراع ماکروها، توسعه نرم‌افزار را مختل کرده‌است.

اکثر زبان‌های اسمبلی دارای امکانات ماکروی دارای رویه‌ای کم‌تر هستند، به عنوان مثال اجازه می‌دهند که یک بلوک از کد را برای بازکردن حلقه تکرار کنند؛ اما این‌ها یک نحو کاملاً متفاوت از زبان اسمبلی واقعی دارند.

ماکروهای همگرا
--------------

سیستم‌های ماکرو-مانند پردازنده C که پیشتر توضیح داده شد که کار در سطح نشانه‌های واژگانی نمی‌توانند به‌طور قابل‌اطمینان ساختار واژگانی را حفظ کنند. سیستم‌های کلان همگانی در عوض در سطح درختان انتزاعی نحوه کار می‌کنند و ساختار واژگانی برنامه اصلی را حفظ می‌کنند. کاربرد گسترده‌ای از سیستم‌های ماکرو نحوی در زبان‌های Lisp مانند Common Lisp، Clojure، Scheme , ISLISP و Racket یافت می‌شود. این زبان‌ها به خصوص برای این سبک ماکرو به خاطر اونیفورم و نحو پرانتز (که به عنوان S-عبارات شناخته می‌شود) مناسب هستند. به‌طور خاص، رکیب نحو را راحت‌تر می‌کند تا تعیین کردن فراخوانی ماکروها را آسان‌تر کند. ماکروهای Lisp ساختار برنامه خود را با استفاده از زبان کامل موجود برای بیان چنین تغییرات تبدیل می‌کند. در حالی که ماکروهای نحوی اغلب در زبان‌های Lisp یافت می‌شوند، آن‌ها نیز در زبان‌های دیگر مانند Prolog , Dylan، Scala , Nemerle، Rust، Elixir , Nim , Haxe , و Julia در دسترس هستند. آن‌ها همچنین به عنوان پسوند شخص ثالث به جاوا اسکریپت، C # و پایتون در دسترس هستند.

### ماکروهای اولیه Lisp

قبل از این که lisp ماکروها را داشته باشد، آن‌ها به اصطلاح FEXPR، عملگرهای تابع-مانند operators که ورودی آن مقادیر محاسبه‌شده توسط آرگومان‌ها نبود، بلکه به جای اشکال نحوی آرگمان‌ها، و خروجی آن مقادیری بود که باید در محاسبات استفاده شود. به عبارت دیگر، FEXPRها در همان سطح EVAL اجرا شدند و پنجره ای را به لایه متا ارزیابی ارائه دادند. به‌طور کلی مشخص شد که این یک مدل مشکل است تا به‌طور مؤثر دلیل آن را توضیح دهد.

در سال ۱۹۶۳ تیموتی هارت پیشنهاد افزودن ماکروها به Lisp 1.5 در AI Memo 57 کرد: تعاریف MACRO برای LISP.

### ماکروهای نابغه

یک ماورای فریبنده، نوعی از ماژول برنامه‌نویسی است که به عمد برخی از فرم‌های عرضه‌شده به ماکرو را می‌گیرد که ممکن است توسط یک anaphor (با اشاره به دیگری) ارجاع داده شود. ماکروسکوپ‌های Anaphoric در ابتدا در پل Graham's در lisp ظاهر شدند و نام آن‌ها اشاره به anaphora زبانی است - استفاده از کلمات به عنوان جایگزین برای کلمات قبلی.

### ماکروهای بهداشتی

در اواسط دهه هشتاد، تعدادی از مقالات [۱۱] [۱۲] مفهوم توسعه ماکرو بهداشتی (`syntax-rules`)، یک سیستم مبتنی بر الگو را معرفی کردند که در آن محیط‌های نحوی تعریف ماکرو و استفاده ماکرو متمای زهستند، که به تعریف کننده‌های ماکرو و کاربران اجازه نمی‌دهند که در مورد تصرف غیرعمدی متغیرنگران باشند (به رغم شفافیت رفرال). ماکروهای بهداشتی برای طرح در استانداردهای R5RS، R6RS و R7RS استاندارد شده‌است. تعدادی از پیاده‌سازی‌های رقابتی با استفاده از ماکروها، مانند قواعد سینتکس، حالت نحوی، تغییر نامصریح، و بسته شدن نحوی وجود دارد. هر دو `syntax-rules` و `syntax-case` در استانداردهای Scheme استاندارد شده‌است.

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

تعدادی از زبان‌ها غیر از Scheme یا ماکروهای بهداشتی را اعمال می‌کنند یا سیستم‌های بهداشتی جزئی را اجرا می‌کنند. نمونه‌هایی از Scala، Rust، Elixir، Julia , Dylan و Nemerle هستند.

### برنامه‌های کاربردی

ارزیابی سفارش
سیستم‌های ماکرو کاربردهای مختلفی دارند. قادر به انتخاب نوع ارزیابی (ارزیابی تنبل و عملکرد غیر سخت) ایجاد سازه‌های نحوی جدید (نظیر ساختارهای کنترل) است که از آن‌هایی که در زبان ساخته شده‌اند غیرقابل‌تشخیص باشند. به عنوان مثال، در گویش لیسپ که دارای `cond` اما فاقد `if`، برای تعریف دوم استفاده از ماکروها امکان‌پذیر است.. به عنوان مثال، Scheme هم دارای continuations و هم hygienic macros است که برنامه‌نویس را قادر می‌سازد که کنترل انتزاعی خود را مانند حلقه looping و حلقه خروجی اولیه، بدون نیاز به ساخت آن‌ها در زبان، طراحی کند.
زبان‌های زیر داده و زبان‌های خاص دامنه
ماکروها، امکان تعریف زبان‌های داده‌ای که بلافاصله در کد تهیه می‌شوند را فراهم می‌کند، که به این معنی است که سازه‌های مانند ماشین‌های حالت را می‌توان بهشیوه‌ای اجرا کرد که هم طبیعی و هم کارآمد باشد.
**ساختارهای اتصال**
ماکروها همچنین می‌تواند برای معرفی ساختارهای اتصال جدید مورد استفاده قرارگیرند. شناخته‌شده‌ترین مثال، تبدیل شدن به کاربرد یک تابع به مجموعه‌ای از آرگمانها است.
فرضیات نشان می‌دهند که این سه مقوله از استفاده قانونی اولیه ازماکروها در چنین سیستمی استفاده می‌کنند. برخی دیگر استفاده از ماکروها را مانند anaphoric macros در سیستم‌های ماکرو که غیربهداشتی هستند یا تغییر شکل غیربهداشتی را ممکن می‌سازند، پیشنهاد کرده‌اند.

تعامل بین ماکروها و دیگر ویژگی‌های زبان یک حوزه مفید از تحقیق بوده‌است. برای مثال، مؤلفه‌ها و ماژول‌ها برای برنامه‌نویسی در مقیاس بزرگ مفید هستند، امابرهمکنش ماکروها و این ساختارها باید برای استفاده آن‌ها با هم تعریف شوند. ماژول و سیستم‌های جزئی که می‌توانند با ماکروها تعامل داشته باشند برای Scheme و سایر زبان‌ها با ماکرو پیشنهاد شده‌اند. به عنوان مثال، زبان racket مفهوم یک سیستم ماکرو را به یک برج نحوی بسطمی‌دهد که در آن ماکروها را می‌توان با زبان از جمله ماکروها، با استفاده از بهداشتبرای تضمین این که لایه‌های نحوی متمایز هستند و اجازه دادن ماژول برای صادراتماکروها به حوزه‌های دیگر را می‌دهد، بسط می‌دهد.

ماکروها برای نرم‌افزار مستقل ماشین
----------------------------------

ماکروها معمولاً برای نگاشت یک رشته کوتاه (فراخوانی ماکرو) به یک توالی طولانی‌تر از دستورالعمل‌ها مورد استفاده قرار می‌گیرند. یکی دیگر که کم‌تر متداول است، استفاده از ماکروها این است که معکوس شود: نگاشت یک توالی دستورالعمل‌ها به یک رشته ماکرو. این رویکرد توسط سیستم برنامه‌نویسی موبایل STAGE۲ اتخاذ شد، که از یک کامپایلر ماکروی ابتدایی (به نام SIMCMP)استفاده می‌کرد تا یک مجموعه دستورالعمل خاص از یک کامپیوتر داده‌شده به counterpart macros را نگاشت کند. برنامه‌های کاربردی (به‌طور خاص کامپایلرها) که در این ماکروها مستقل از دستگاه نوشته شده‌است، بدون تغییر در هر کامپیوتری که مجهز به کامپایلر ماکروی اولیه است اجرا می‌شود. اولین برنامه کاربردی که در چنین زمینه ای اجرا می‌شود، یک کامپایلر ماکرو پیچیده‌تر و قدرتمند است که در زبان ماکروی مستقل از دستگاه نوشته شده‌است. این کامپایلر ماکرو برای خودش، به روش بوت استرپ، برای تولید یک نسخه ترجمه‌شده و بسیار کارآمدتر از خودش استفاده می‌شود. مزیت این رویکرد این است که برنامه‌های پیچیده را می‌توان از یک کامپیوتر به یک کامپیوتر بسیار متفاوت با تلاش بسیار کمی (برای هر معماری ماشین هدف، فقط نوشتن یک compiler ابتدایی)منتقل کرد. ظهور زبان‌های برنامه‌نویسی مدرن، به خصوص C، که کامپایلرها در تمام رایانه‌ها در دسترس هستند، این رویکرد را بی‌فایده کرده‌است. با این وجود، این یکی از اولین نمونه از بوت استرپینگ کامپایلر بود.

زبان اسمبلی
-----------

در حالی که دستورالعمل‌های ماکرو را می‌توان توسط برنامه‌نویس برای هر مجموعه دستورها برنامه اسمبلر محلی تعریف کرد، معمولاً ماکروها با کتابخانه‌های ماکرو مرتبط با سیستم عملیاتی که امکان دسترسی بهتوابع سیستم‌عامل را فراهم می‌کند، مرتبط هستند. مانند:

* دسترسی محیطی توسط روش‌های دسترسی (از جمله ماکروهای مانند OPEN, CLOSE, READ و WRITE)
* توابع سیستم عامل مانند ATTACH, WAIT و POST برای ایجاد و هماهنگ سازی زیر کارها. به‌طور معمول چنین ماکروها به کد اجرایی گسترش می‌یابند،
* یک لیست از تعریف دستورالعمل‌های *ثابت*، به عنوان مثال، برای DCB ماکرو - DTF (تعریف فایل) برای DOS - یا ترکیبی از کد و ثوابت، با جزییات توسعه، بسته به پارامترهای دستورالعمل ماکرو (مانند ارجاع به فایل و یک حوزه داده برای دستور خواندن)؛
* کد قابل‌اجرا اغلب در یک شاخه یا دستورالعمل ثبت لینک برای فراخوانی یک برنامه روتین یا یک ناظر فراخوانی به فراخوانی سیستم عملیاتی به‌طور مستقیم پایان می‌یابد.

در سیستم‌های عملیاتی قدیمی‌تر مثل آن‌هایی که در پردازنده‌های مرکزی IBM مورد استفاده قرار می‌گرفتند، عملکرد سیستم‌عامل کامل تنها برای برنامه‌های زبانی assembler در دسترس بود (مگر اینکه از subroutines زبان اسمبلی استفاده شود)، همان‌طور که دستورالعمل‌های استاندارد ماکرو معمولاً دارای همتایان دارای سطح بالا نیستند.

تاریخ
-----

در اواسط دهه ۱۹۵۰، زمانی که برنامه‌نویسی مونتاژ مکرر برای نوشتن برنامه های رایانه‌های دیجیتال مورد استفاده قرار گرفت، استفاده از **دستورالعمل‌های ماکرو** برای دو هدف اصلی آغاز شد: کاهش مقدار کدگذاری برنامه که می‌بایست با ایجاد چندین بیانیه زبان اسمبلی از یک دستور ماکرو و اجرای استانداردهای نوشتن برنامه، نوشته شود، به عنوان مثال، تعیین فرمان‌های ورودی / خروجی به روش‌های استاندارد. دستورالعمل‌های ماکرو به‌طور مؤثر یک قدم میانی بین برنامه‌نویسی زبان اسمبلی و زبان‌های برنامه‌نویسی سطح بالا بود که بعد از آن، مثل FORTRAN و کوبول معرفی شدند.. دو مورد از اولین تأسیسات برنامه‌نویسی برای توسعه «زبان‌های ماکرو» برای تولید IBM ۷۰۵، در شرکت شیمیایی داو در دلاور و فرماندهی متریال هوایی، ballistics Missile Logistics در کالیفرنیا بود. یک دستور ماکرو که در فرمت زبان اسمبلی هدف نوشته می‌شود، توسط یک مترجم ماشینی پردازش می‌شود، که برای تولید یک یا چند دستورالعمل زبان اسمبلی در کنار برنامه assembler پردازش می‌شود که دستورالعمل زبان اسمبلی را به دستورالعمل‌های زبان ماشین ترجمه می‌کند. [۲۲]

در اواخر دهه ۱۹۵۰، زبان ماکرو توسط Macro Assemblers دنبال شد. این ترکیبی از هر دو برنامه بود که در یک برنامه برای هر دو عمل می‌کرد، که از پیشپردازنده و یک موتاژکننده تشکیل شده بود. ین به برنامه نویسان زبان اسمبلی اجازه داد تا زبان ماکروی خود را پیاده کنند و قابلیت انتقال محدود کدها را بین دو ماشین اجرا کنند که همان CPU را در سیستم‌عامل متفاوت اجرا می‌کردند، برای مثال، نسخه‌های ابتدایی MSDOS و CPM - ۸۶. کتابخانه ماکرو باید برای هر ماشین هدف نوشته شود، نه برای برنامه کلی زبان اسمبلی. توجه داشته باشید که اسمبلرهای قدرتمندتر می‌توانند از ساختارهای مونتاژ مشروط در دستورالعمل‌های ماکرو استفاده کنند که می‌توانند کدهای مختلف را روی دستگاه‌های مختلف یا سیستم عامل‌های مختلف تولید کنند و نیاز به کتابخانه‌های مختلف را کاهش دهند.

در دهه ۱۹۸۰ و اوایل دهه ۱۹۹۰، رایانه‌های رومیزی تنها در چند مگاهرتز کار می‌کردند و برنامه‌های مونتاژ زبان به‌طور معمول برای سرعت بخشیدن به برنامه‌های نوشته شده در C, Fortran, Pascal و دیگران استفاده می‌شد. این زبان‌ها در آن زمان، از کنوانسیون‌های مختلف تماس استفاده می‌کردند. \*\*ماکروها می‌توانند برای روتین‌های رابط نوشته شده در زبان مونتاژ به قسمت اولیهٔ برنامه‌های نوشته شده در هر زبان نوشته شوند. \*\* باز هم، کد زبان اسمبلی اصلی همان بود، فقط کتابخانه‌های ماکرو مورد نیاز برای هرزبان مقصد نوشته می‌شدند.

در سیستم‌های عملیاتی مدرن مانند یونیکس و مشتقات آن، دسترسی به سیستم از طریق subroutines ارائه می‌شود که معمولاً توسط کتابخانه‌های پویا ارائه می‌شود. زبان‌های سطح بالا مانند C، دسترسی جامع به توابع سیستم‌عامل را ارائه می‌کنند و نیاز به برنامه‌های زبانی assembler برای این قابلیت را فراهم می‌کنند.

جستارهای وابسته
---------------

* ماکروهای نابغه
* Assembly language § Macros (منشأ مفهوم ماکرو)
* برنامه‌ریزی قابل برنامه‌ریزی
* ماکروهای بهداشتی
* برنامه‌نویسی توسط تظاهرات
* درونیابی رشته

منابع
-----

1. 1 2 3 4  "Macro (computer science)". *Wikipedia* (به انگلیسی). 2020-02-06.
2. ↑  Greenwald, Irwin D.; Maureen Kane (April 1959). "The Share 709 System: Programming and Modification". *Journal of the ACM*. New York, NY, USA: ACM. **6** (2): 128–133. doi:10.1145/320964.320967. One of the important uses of programmer macros is to save time and clerical-type errors in writing sequence of instructions which are often repeated in the course of a program.
3. ↑  Strachey, Christopher (October 1965). "A General Purpose Macrogenerator". *Computer Journal*. **8** (3): 225–241. doi:10.1093/comjnl/8.3.225.
4. ↑  "Runescape: The Massive Online Adventure Game by Jagex Ltd". Retrieved 2008-04-03.
5. ↑
6. ↑
7. ↑
8. ↑
9. ↑
10. ↑  Marshall, Joe. "untitled email". Retrieved May 3, 2012.
11. ↑  "AIM-057, MACRO Definitions for LISP, Timothy P. Hart".
12. ↑  Flatt, Matthew. "Composable and compilable macros: you want it when?" (PDF).
13. ↑  Rafkind, Jon; Flatt, Matthew. "Honu: Syntactic Extension for Algebraic Notation through Enforestation" (PDF).
14. ↑   مقاله دانشگاه براون درباره ماکروهای اتوماتیک
15. ↑  Orgass, Richard J.; William M. Waite (September 1969). "A base for a mobile programming system". *Communications of the ACM*. New York, NY, USA: ACM. **12** (9): 507–510. doi:10.1145/363219.363226.
16. ↑  Waite, William M. (July 1970). "The mobile programming system: STAGE2". *Communications of the ACM*. New York, NY, USA: ACM. **13** (7): 415–421. doi:10.1145/362686.362691.
17. ↑  "University of North Florida" (PDF).
18. ↑  "DTF (DOS/VSE)".
19. ↑  "IBM Knowledge Center". *IBM Knowledge Center*.
20. ↑  "Assembler Language Macro Instructions". *Cisco*.

*

پیوند به بیرون
--------------

* نحوه نوشتن دستورالعمل‌های ماکرو
* مؤسسه تکنولوژی روچستر، استادان پاورپوینت