ماکرو (علوم رایانه): تفاوت میان نسخهها
Negin.rajabi (بحث | مشارکتها) ایجاد شده توسط ترجمهٔ صفحهٔ «Macro (computer science)» |
ویژگی پیوندهای پیشنهادی: ۲ پیوند افزوده شد. برچسبها: ویرایشگر دیداری ویرایش همراه ویرایش از وبگاه همراه وظیفه تازهوارد پیشنهادی: افزودن پیوند |
||
(۲۸ نسخهٔ میانی ویرایش شده توسط ۱۴ کاربر نشان داده نشد) | |||
خط ۱: | خط ۱: | ||
{{الگوهای برنامهنویسی}} |
|||
یک '''ماکرو''' {{به انگلیسی|macro}} در [[علوم رایانه]] یک [[الگو]] یا قاعده است که مشخص میکند چگونه بر اساس یک فرایند از قبل معین شده، یک ترتیب ورودی بخصوص (که معمولاً ترتیبی از [[نویسه (رایانه)|نویسه]]<nowiki/>ها هستند) باید به یک ترتیب خروجی جایگزینشده (که آن نیز معمولاً ترتیبی از نویسهها میباشد) نگاشت (تناظر) یابد.<ref name=":0">{{Cite journal|date=2020-02-06|title=Macro (computer science)|url=https://en.wikipedia.org/w/index.php?title=Macro_(computer_science)&oldid=939467778|journal=Wikipedia|language=en}}</ref> |
|||
[[پرونده:Jedit_macro_recorder.png|بندانگشتی| ویرایشگر ماژول jEdit ]] |
|||
یک '''ماکرو''' (به اختصار " macroinstruction "، از زبان [[زبان یونانی|یونانی]] {{Lang|grc|μακρός}} 'long') در علوم کامپیوتر یک قاعده یا الگو است که مشخص میکند چگونه یک توالی ورودیخاص (اغلب توالی حروف)باید به توالی خروجی جایگزینی (که اغلب توالی حروف)با توجه به یک روش تعریف شدهاست، ترسیم شود. فرآیند ارجاع دادن که منجر به تبدیل ماکرو به یک دنباله خاص میشود، به عنوان گسترش ماکرو شناخته میشود. امکانات برای نوشتن ماکرو شاید به عنوان بخشی از [[نرمافزار کاربردی|نرم افزار]] یا به عنوان بخشی از یک [[زبان برنامهنویسی|زبان برنامه نویسی ارائه شود]] . در مورد اول، ماکروها برای ایجاد وظایف که از برنامه غیرکاربردی استفاده کند،استفاده میشوند . در مورد دوم، آنها یک ابزار هستند که به ی برنامه نویس اجازه می دهد تا استفاده مجدد کد یا حتی برای طراحی [[زبان خاص دامنه|زبان های خاص دامنه]] را فعال کند. |
|||
کلمهٔ ماکرو کوتاه شده عبارت «macroinstruction» به معنی «دستورات ماکرو» است. در زبان یونانی ماکرو (μακρός) به معنی «بزرگ یا کلان» (long) میباشد.<ref name=":0"/> |
|||
ماکروها برای ایجاد دنباله ای از دستورالعمل های محاسباتی در دسترس [[برنامهنویسی|برنامه نویس]] به عنوان یک برنامه استفاده می شود، و کارکرد برنامه نویسی را راحت تر میکند <ref>{{Cite journal|last=Greenwald|first=Irwin D.|last2=Maureen Kane|date=April 1959|title=The Share 709 System: Programming and Modification|url=http://doi.acm.org/10.1145/320964.320967|format=[[PDF]]|journal=Journal of the ACM|location=New York, NY, USA|publisher=ACM|volume=6|issue=2|pages=128–133|doi=10.1145/320964.320967|quote=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.}}</ref> <ref>{{Cite journal|last=Strachey|first=Christopher|author-link=Christopher Strachey|date=October 1965|title=A General Purpose Macrogenerator|journal=Computer Journal|volume=8|issue=3|pages=225–241|doi=10.1093/comjnl/8.3.225}}</ref> (بنابراین، "ماکرو" نامیده می شوند، زیرا یک بلوک کد بزرگ را میتوانند از یک دنباله کاراکتر کوچک گسترش بدهند. ) ماکروها اغلب به پارامترهای موقعیتی یا کلیدواژه ها اجازه میدهند که آنچه برنامه مونتاژ کننده ی شرطی تولید میکند را دیکته کند و برای ایجاد کل برنامهها و مجموعههای برنامه با توجه به متغيرهايي مانند [[سیستمعامل|سيستم عامل]] ، [[سکوی رایانش|پلت فرم]] و يا عوامل ديگر، مورد استفاده قرار گيرد. این اصطلاح از "دستورالعمل ماکرو" بدست می آید، و از این قبیل توسعه ها در تولید کد [[زبان اسمبلی|زبان مونتاژ]] استفاده می شود. |
|||
فرایندی نگاشتی که در آن «ماکروی استفاده شده» به یک «ترتیب خاص» نمونهبرداری (تبدیل) میشود، به عنوان «گسترش ماکرو» شناخته میشود. امکانات نوشتن ماکرو میتواند به عنوان یک [[نرمافزار کاربردی]] یا بخشی از [[زبان برنامهنویسی]] فراهم شود. در حالت اول، از ماکروها برای ساخت فعالیتهایی به وسیلهٔ برنامههای کم تکرارتر استفاده میشد. در حالات دوم، آنها یک ابزاراند که برنامهنویس امکان [[استفاده مجدد از کد]]، یا حتی امکان طراحی [[زبان خاص دامنه|زبانهای خاص منظوره]] را میدهند.<ref name=":0"/> |
|||
از ماکرو برای فراهم ساختن ترتیبی از دستورالعملهای محاسباتی برای [[برنامهنویس]]، به صورت یک عبارت برنامه ای منفرد، استفاده میشود. استفاده از ماکروها باعث کمتر «مستعد خطر بودن» و «کمتر خستهکننده بودن» برنامهنویسی استفاده میشود.<ref>{{cite journal|last=Greenwald|first=Irwin D.|author2=Maureen Kane|date=April 1959|title=The Share 709 System: Programming and Modification|journal=Journal of the ACM|location=New York, NY, USA|publisher=ACM|volume=6|issue=2|pages=128–133|doi=10.1145/320964.320967|quote=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.}}</ref><ref>{{cite journal|last=Strachey|first=Christopher|authorlink=Christopher Strachey|date=October 1965|title=A General Purpose Macrogenerator|journal=Computer Journal|volume=8|issue=3|pages=225–241|doi=10.1093/comjnl/8.3.225}}</ref> (از این جهت، به آنها ماکرو میگویند، که یک بلاک «بزرگ» کد میتواند از یک ترتیب «کوچک» از نویسهها گسترش بیابند). ماکروها اکثراً استفاده از [[پراسنجه (برنامهنویسی رایانهای)|پراسنجه]]های کلمه کلیدی یا موقعیتی (که مشخص میکنند که برنامهٔ اتصال شرطی چه چیزی را تولید میکند) را مجاز میداند و از آنها برای ساخت برنامههای کامل یا مجموعه برنامههایی برای [[سیستم عامل]]، [[سکوی رایانش]]، یا انواع دیگر برنامه استفاده میکند. عبارت «ماکرو» از «macro instruction» گرفته شدهاست، و از این گسترشها در گذشته در اساس برای ساخت کدهای [[زبان اسمبلی]] استفاده میشد.<ref name=":0"/> |
|||
== ماکروهای صفحه کلید و ماوس == |
== ماکروهای صفحه کلید و ماوس == |
||
[[پرونده:Jedit_macro_recorder.png|بندانگشتی| ویرایشگر ماژول jEdit]] |
|||
'''ماکروهای صفحه کلید''' و '''ماکروهای''' '''ماوس''' اجازه می دهد که توالی های کوتاهی از عملکردهای کلیدی و ماوس برای تبدیل شدن به توالی های کلیدی و اقدامات ماوس دیگر، معمولا بیشتر وقت گیر باشند. به این صورت، استفاده های مکرر یا دنباله های تکراری از عملکرد های کلیدی و حرکت های موس میتواند به صورت خودکار انجام شود. برنامه های دیگر برای درست کردن این ماکرو ها را ضبظ کننده ی ماکرو می نامند . |
|||
'''ماکروهای صفحه کلید''' و '''ماکروهای''' '''ماوس''' اجازه میدهد که توالیهای کوتاهی از عملکردهای کلیدی و ماوس برای تبدیل شدن به توالیهای کلیدی و اقدامات ماوس دیگر، معمولاً بیشتر وقت گیر باشند. به این صورت، استفادههای مکرر یا دنبالههای تکراری از عملکردهای کلیدی و حرکتهای موس میتواند به صورت خودکار انجام شود. برنامههای دیگر برای درست کردن این ماکروها را ضبظ کنندهٔ ماکرو مینامند. |
|||
در طول دهه |
در طول دهه ۱۹۸۰، برنامههای مارکرو - اول SmartKey، سپس SuperKey, KeyWorks, Prokey-ابتدا به عنوان وسیله ای برای فرمت خودکار صفحه نمایش، سپس برای انواع کارهای ورودی کاربر بسیار محبوب بودند. این برنامهها بر اساس حالت عملیاتی TSR (خاتمه و اقامت) و بر روی تمام ورودیهای صفحه کلید اعمال میشود، مهم نیست که در کدام زمینه رخ داده باشد. پس از ظهور [[واسط کاربر]] - و در دسترس بودن صفحهکلید و ماکروهای موس در برنامههای کاربردی مانند پردازشگرهای کلمه و صفحات گسترده، آنها تا حدی در حال از بین رفتن هستند و امکان ایجاد ماکروهای صفحه کلید را برای کاربر ایجاد میکند. |
||
<nowiki/>**ماکروهای صفحه کلید |
<nowiki/>**ماکروهای صفحه کلید اخیراً به عنوان یک روش بهرهبرداری اقتصاد [[بازی نقش آفرینی بر خط چندنفره گسترده|بازیهای آنلاین نقش مهمی بازی چند نفره آنلاین]] (MMORPGs) زندگی میکنند. **با انجام یک اقدام خستهکننده، تکراری، اما با ریسک پایین، بازیکنی که یک ماکرو را اجرا کند میتواند مقدار زیادی از پول رایج یا منابع را بدست آورد. این اثر حتی زمانی بزرگتر است که یک بازیکن ماکرو با استفاده از حسابهای گوناگونبهطور همزمان عمل میکند یا حسابها را برای مدتزمان زیادی در هر روز انجام میدهد. از آنجا که این پول بدون دخالت انسان تولید میشود، میتواند بهطور چشمگیریاقتصاد این بازی را واژگون کند به همین دلیل، استفاده از ماکرو نقض [[شرایط و مقررات سرویسدهی|TOS]] یا [[توافقنامه مجوز کاربر نهایی|EULA]] اکثر MMORPGها است و مدیران MMORPGها با جنگ دائمی برای شناسایی و مجازات کاربران کلان مبارزه میکنند.<ref>{{Cite web|url=http://www.runescape.com/|title=Runescape: The Massive Online Adventure Game by Jagex Ltd.|accessdate=2008-04-03}}</ref> |
||
=== برنامه macros و اسکریپت نویسی === |
=== برنامه macros و اسکریپت نویسی === |
||
ماکروهای صفحه کلید و ماوس که با استفاده از |
ماکروهای صفحه کلید و ماوس که با استفاده از ویژگیهای کلیدی ساخته شده در برنامه ایجاد میشوند گاهی به نام '''ماکرو برنامه شناخته میشوند'''. آنها با انجام دادن توالی زمانی و اجازه دادن به ثبت اعمال، ایجاد میشوند. یک زبان برنامهنویسی ماکرو، اغلب [[زبان اسکریپتنویسی|زبان اسکریپتی]]، با دسترسی مستقیم به ویژگیهای برنامه ممکن است وجود داشته باشد. |
||
ویرایشگر متن برنامه نویسان، Emacs (کوتاه |
[[ویرایشگر متن|ویرایشگر متن]] برنامه نویسان، Emacs (کوتاه شدهٔ «ویرایش ماکروها») از این ایده به نتیجه میرسد. در واقع بیشتر ویرایشگر از macros ساخته شدهاست.Emacs در ابتدا به عنوان یک مجموعه از ماکروها در زبان ویرایش TECO ابداع شد؛ بعدها به گویش lispمنتقل شد. |
||
ویرایشگر متن برنامه نویسان دیگر، [[ویم|Vim]] |
ویرایشگر متن برنامه نویسان دیگر، [[ویم|Vim]] (از نوادگان [[ویآی|ششم]])، نیز اجرای کامل ماکرو را دارد. این دستگاه میتواند در یک رجیستر (ماکرو) ثبت شود که چه کسی روی صفحه کلید قرار دارد و میتواند درست مانند VBA macros برای مایکروسافت تکرار یا ویرایش شود. Vim همچنین دارای یک زبان برنامهنویسی به نام [[ویم|Vimscript]]<ref><div> http://www.vim.org/scripts/index.php </div></ref> برای ایجاد ماکروها است. |
||
ویژوال بیسیک برای |
[[ویژوال بیسیک]] برای برنامههای کاربردی (VBA) یک زبان برنامهنویسی است که در [[مایکروسافت آفیس|Microsoft Office]] از Office 97 از طریق Office 2019 موجود است (اگر چه در بعضی از اجزای Office قبل از Office 97 موجود بود). با این حال، عملکرد آن از زبان ماکرو شکلگرفته و جایگزین زبانهای ماکرو شدهاست که در اصل در برخی از این برنامهها گنجانده شدهاند. |
||
==== ویروس ماکرو ==== |
==== ویروس ماکرو ==== |
||
VBA |
VBA به بسیاری از فراخوانیهای سیستم ویندوز مایکروسافت دسترسی دارد و زمانی که اسناد بازمیشوند اجرا میشود. این موضوع نوشتن [[ویروس رایانهای|ویروسهای کامپیوتری]] در VBA را نسبتاً آسان میکند، که معمولاً به عنوان [[ویروس ماکرو|ویروسهای ماکرو]] شناخته میشوند. در اواسط تا اواخر دهه ۱۹۹۰، این نوع یکی از رایجترین انواع [[ویروس رایانهای|ویروسهای کامپیوتر]] شد. با این حال، در اواخر دهه ۱۹۹۰ و تا به امروز، [[مایکروسافت]] برنامههای خود را تعمیر و به روز کردهاست. افزون بر این، برنامههای ضد ویروس فعلی فوراً چنین حملاتی را بیاثر میکنند. |
||
== ماکرو پارامتری == |
== ماکرو پارامتری == |
||
یک ماکرو پارامتری یک ماکرو است که میتواند اشیا دادهشده را به بسط خود وارد کند.این به ماکرو مقداری از قدرت یک تابع را میدهد |
یک ماکرو پارامتری یک ماکرو است که میتواند اشیا دادهشده را به بسط خود وارد کند. این به ماکرو مقداری از قدرت یک تابع را میدهد |
||
یک مثال ساده، در [[سی (زبان برنامهنویسی)|زبان |
یک مثال ساده، در [[سی (زبان برنامهنویسی)|زبان برنامهنویسی C]]، این ماکرو معمولی است ''که'' ماکرو پارامتری نیست: |
||
'''#define''' PI 3.14159 |
'''#define''' PI 3.14159 |
||
این باعث |
این باعث میشود رشته "PI" با "۳٫۱۴۱۵۹" جایگزین شود هر کجا که رخ دهد. این رشته همواره با این رشته جایگزین خواهد شد و ریسمان حاصل را نمیتوان به هر نحوی تغییر داد. یک مثال از ماکروی پارامتری: |
||
'''#define''' pred(x) |
'''#define''' pred(x) ((x)-1) |
||
حاصل تابع ماکرو بستگی به (x) ورودی آن دارد |
حاصل تابع ماکرو بستگی به (x) ورودی آن دارد. چند مثال: |
||
pred (2) → (( |
pred (2) → ((۲) -۱÷ |
||
pred (y + 2) → ((y + 2) -1) |
pred (y + 2) → ((y + 2) -1) |
||
pred (f (5)) → ((f (5)) - 1) |
pred (f (5)) → ((f (5)) - 1) |
||
ماکروهای پارامتری یک مکانیزم مفید در سطح منبع برای توسعه [[گسترش در خط|گسترش درون خطی]] |
ماکروهای پارامتری یک مکانیزم مفید در سطح منبع برای توسعه [[گسترش در خط|گسترش درون خطی]] است، اما در زبانهایی مانند [[سی (زبان برنامهنویسی)|C]] که از جایگزینی متنی ساده استفاده میکنند، برخی مضرات شدید برمکانیزمهای دیگر برای انجام توسعه در خط، مانند توابع inline دارند. |
||
ماکروهای پارامتری در زبانهایی مانند lisp, PL/I و Scheme استفاده میشود، از طرف دیگر، بسیار قدرتمندتر هستند و قادر به تصمیمگیری دربارهٔ آنچه که براساس استدلالات آنهاتولید میشود، هستند. از این رو، آنها میتوانند بهطور مؤثر برای اجرای [[تولید کد]] زمانی استفاده شوند. |
|||
== |
== ماکروهای متن-جایگزین == |
||
زبانهایی مانند [[سی (زبان برنامهنویسی)|C]] و برخی از [[زبان اسمبلی|زبانهای مونتاژ]] دارای سیستمهای کلان اولیه هستند که به عنوان [[پیشپردازنده|پیش پردازنده]]های کامپایلر یا مونتاژکننده اجرا میشوند. ماکرو هایپیش پردازندهٔ C با جایگزینی متنی ساده در [[تحلیل واژگانی|نشانه]]، به جای کاراکتر کار میکند. **با این حال، امکانات ماکرو اسمبلرهای پیچیدهتر، به عنوان مثال، IBM High Level Assembler (HLASM) با یک پیش پردازنده قابل اجرا نیست؛ کد مونتاژ دستورالعملها و دادهها با کد مونتاژ فراخوانیهای کلان در هم آمیختهاست. ** استفاده کلاسیک از ماکرو در سیستم تایپ کامپیوتری [[تک (نرمافزار)|TeX]] و مشتقات آن است، که اکثر این قابلیتها بر اساس ماکرو است. MacroML یک سیستم آزمایشی است که به دنبال تطبیق سیستمهای تایپ دهی ایستا و سیستمهای ماکرو است. Nemerle ماکروهای نحوی را تایپ کردهاست و یکی از راههای کارآمد برای فکر کردن به این ماکروهای نحوی به عنوان یک محاسبه چند مرحله ای است. مثالهای دیگر: |
|||
* M4 یک پردازنده مرکزی مستقل و پیشرفته است. |
|||
<br /> |
|||
* TRAC |
|||
* TAL فرمت ماکرو، همراه با Attribute Language Template |
|||
* SMX: برای صفحات وب |
|||
* ML / 1 (زبان ماکرو) |
|||
* Macroprocessor عمومی منظور یک الگوی متنی است که با پردازشگر ماکرو منطبق است، که میتواند به عنوان ترکیبی از [[عبارت باقاعده|عبارات منظم]]، [[فرم باکوس نائور توسعه یافته|EBNF]] و [[AWK|AWK توصیف شود]] |
|||
* SAM76 |
|||
* troff و nroff: برای تایپ کردن و قالب بندی صفحات یونیکس. |
|||
* CMS EXEC: برای ماکرو خط فرمان و ماکرو برنامه |
|||
* EXEC 2 در سیستم مانیتورینگ گفتگو (CMS): برای ماکرو خط فرمان و ماکروسافت برنامه |
|||
* CLIST در Time Sharing Option (TSO) IBM: برای ماکرو خط فرمان و ماکرو برنامه |
|||
* REXX: برای ماکرو خط فرمان و ماکروهای برنامه در، مانند، [[آمیگااواس|AmigaOS]] , CMS، [[اواس/۲|OS / 2]]، TSO |
|||
* SCRIPT: برای قالب بندی اسناد |
|||
* [[پوسته (رایانه)|پوسته]]های مختلف برای مثال، [[لینوکس]] |
|||
برخی از برنامههای اصلی به عنوان ماکرو متنی که توسط برنامههای دیگر به کار گرفته شدهاند، به عنوان مثال، توسط XEDIT در CMS نوشته شدهاند. |
|||
* M4 یک پردازنده مرکزی مستقل و پیشرفته است. |
|||
* TRAC |
|||
* TAL فرمت ماکرو ، همراه با Attribute Language Template |
|||
* SMX : برای صفحات وب |
|||
* ML / 1 (زبان ماکرو) |
|||
* Macroprocessor عمومی منظور یک الگوی متنی است که با پردازشگر ماکرو منطبق است، که می تواند به عنوان ترکیبی از [[عبارت باقاعده|عبارات منظم]] ، [[فرم باکوس نائور توسعه یافته|EBNF]] و [[AWK|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]] میتوانند در متن فرمت آزاد یا کد مبدأ زبانهای دیگر تعبیه شوند. مکانیزمی که با آن قطعات کد شناسایی میشود (برای مثال، که با <code><?php</code> و <code>?></code>) شبیه به یک زبان ماکروی متنی است، اما آنها بسیار قدرتمند و کاملاً برجسته هستند. |
|||
=== زبان های قابل تعویض === |
|||
بعضی از زبانها مانند [[پیاچپی|PHP]] میتوانند در متن فرمت آزاد یا کد مبدا زبانهای دیگر تعبیه شوند. مکانیزمی که با آن قطعات کد شناسایی می شود (برای مثال، که با <code><?php</code> و <code>?></code> ) شبیه به یک زبان ماکروی متنی است، اما آن ها بسیار قدرتمند و کاملا برجسته هستند. |
|||
== ماکروهای دستورالعمل == |
== ماکروهای دستورالعمل == |
||
ماکروها در زبان [[پیال/۱|PL / I]] در یک زیر مجموعه از PL / I نوشته |
ماکروها در زبان [[پیال/۱|PL / I]] در یک زیر مجموعه از PL / I نوشته شدهاند: کامپایلر " [[پیشپردازنده|دستورات پیش پردازنده]] " را در زمان کامپایل اجرا میکند و خروجی این اجرا بخشی از کد تدوینشده توسط آن است. توانایی استفاده از یک زبان پردازشی به عنوان [[برنامهنویسی رویهای|زبان]] ماکرو، بسیار بیشتر از زبان جایگزینی متن با هزینه یک کامپایلر بزرگتر و کندتر است. |
||
چارچوب ماکروهای [[:en:Frame_technology_(software_engineering)|Frame technology]]'s دارای نحو فرماندهی خاص خود است، اما همچنین میتواند حاوی متن به هر زبانی باشد. هر فریم یک جز کلی در یک |
چارچوب ماکروهای [[:en:Frame_technology_(software_engineering)|Frame technology]]'s دارای نحو فرماندهی خاص خود است، اما همچنین میتواند حاوی متن به هر زبانی باشد. هر فریم یک جز کلی در یک [[سلسلهمراتب|سلسله مراتب]] از زیر مجموعههای تودرتو و یک روش برای ادغام خود با چارچوبهای فرعی خود (یک فرایند بازگشتی که تضادهای یکپارچهسازی را به نفع زیرمجموعههای سطح بالاتر حل میکند) است. خروجیها اسناد سفارشی هستند، معمولاً ماژولهای منبع کامپایل را دارند. تکنولوژی چارچوب میتواند از تکثیر قطعات مشابه اما بسیار متفاوت اجتناب کند، مسئلهای که از زمان اختراع ماکروها، توسعه نرمافزار را مختل کردهاست. |
||
اکثر زبانهای اسمبلی دارای امکانات ماکروی دارای رویهای کمتر هستند، به عنوان مثال اجازه میدهند که یک بلوک از کد را برای |
اکثر زبانهای اسمبلی دارای امکانات ماکروی دارای رویهای کمتر هستند، به عنوان مثال اجازه میدهند که یک بلوک از کد را برای بازکردن حلقه تکرار کنند؛ اما اینها یک نحو کاملاً متفاوت از زبان اسمبلی واقعی دارند. |
||
== ماکروهای همگرا == |
== ماکروهای همگرا == |
||
سیستمهای ماکرو-مانند پردازنده C که پیشتر توضیح داده شد که کار در سطح نشانههای واژگانی نمیتوانند بهطور قابلاطمینان ساختار واژگانی را حفظ کنند. سیستمهای کلان همگانی در عوض در سطح [[درخت نحو انتزاعی|درختان انتزاعی نحوه کار میکنند]] و ساختار واژگانی برنامه اصلی را حفظ میکنند. کاربرد گستردهای از سیستمهای ماکرو نحوی در زبانهای [[لیسپ|Lisp]] مانند [[لیسپ معمولی|Common Lisp]]، [[کلوژر|Clojure]]، [[اسکیم|Scheme]] , ISLISP و [[دکتر اسکیم|Racket یافت میشود]]. این زبانها به خصوص برای این سبک ماکرو به خاطر اونیفورم و نحو پرانتز (که به عنوان S-عبارات شناخته میشود) مناسب هستند. بهطور خاص، رکیب نحو را راحتتر میکند تا تعیین کردن فراخوانی ماکروها را آسانتر کند. ماکروهای Lisp ساختار برنامه خود را با استفاده از زبان کامل موجود برای بیان چنین تغییرات تبدیل میکند. در حالی که ماکروهای نحوی اغلب در زبانهای Lisp یافت میشوند، آنها نیز در زبانهای دیگر مانند [[پرولوگ|Prolog]] , Dylan، [[اسکالا|Scala]] , Nemerle، [[راست (زبان برنامهنویسی)|Rust]]، [[الیکسیر (زبان برنامهنویسی)|Elixir]] , Nim , Haxe ,<ref><div> http://haxe.org/manual/macro.html </div></ref> و [[جولیا|Julia در دسترس هستند]]. آنها همچنین به عنوان پسوند شخص ثالث به [[جاوااسکریپت|جاوا اسکریپت]]،<ref><div> http://sweetjs.org/ </div></ref> [[سی شارپ|C #]] و [[پایتون (زبان برنامهنویسی)|پایتون در دسترس هستند]].<ref><div> https://github.com/lihaoyi/macropy </div></ref><ref><div> http://ecsharp.net/lemp </div></ref> |
|||
=== ماکروهای اولیه Lisp === |
=== ماکروهای اولیه Lisp === |
||
قبل از این که lisp ماکروها را داشته باشد، |
قبل از این که lisp ماکروها را داشته باشد، آنها به اصطلاح FEXPR، عملگرهای تابع-مانند operators که ورودی آن مقادیر محاسبهشده توسط آرگومانها نبود، بلکه به جای اشکال نحوی آرگمانها، و خروجی آن مقادیری بود که باید در محاسبات استفاده شود. به عبارت دیگر، FEXPRها در همان سطح EVAL اجرا شدند و پنجره ای را به لایه متا ارزیابی ارائه دادند. بهطور کلی مشخص شد که این یک مدل مشکل است تا بهطور مؤثر دلیل آن را توضیح دهد.<ref>{{Cite web|url=http://www.brinckerhoff.org/scraps/joe-marshall-on-FEXPRS-and-DEFMACRO.txt|title=untitled email|accessdate=May 3, 2012|last=Marshall|first=Joe}}</ref> |
||
در سال |
در سال ۱۹۶۳ تیموتی هارت پیشنهاد افزودن ماکروها به Lisp 1.5 در AI Memo 57 کرد: تعاریف MACRO برای LISP.<ref>{{Cite web|url=http://hdl.handle.net/1721.1/6111|title=AIM-057, MACRO Definitions for LISP, Timothy P. Hart}}</ref> |
||
=== ماکروهای نابغه === |
=== ماکروهای نابغه === |
||
یک ماورای فریبنده، نوعی از ماژول |
یک ماورای فریبنده، نوعی از ماژول برنامهنویسی است که به عمد برخی از فرمهای عرضهشده به ماکرو را میگیرد که ممکن است توسط یک anaphor (با اشاره به دیگری) ارجاع داده شود. ماکروسکوپهای Anaphoric در ابتدا در پل Graham's در lisp ظاهر شدند و نام آنها اشاره به anaphora زبانی است - استفاده از کلمات به عنوان جایگزین برای کلمات قبلی. |
||
=== ماکروهای بهداشتی === |
=== ماکروهای بهداشتی === |
||
در اواسط دهه هشتاد، تعدادی از مقالات [ |
در اواسط دهه هشتاد، تعدادی از مقالات [۱۱] [۱۲] مفهوم توسعه ماکرو بهداشتی (<code>syntax-rules</code>)، یک سیستم مبتنی بر الگو را معرفی کردند که در آن محیطهای نحوی تعریف ماکرو و استفاده ماکرو متمای زهستند، که به تعریف کنندههای ماکرو و کاربران اجازه نمیدهند که در مورد تصرف غیرعمدی متغیرنگران باشند (به رغم شفافیت رفرال). ماکروهای بهداشتی برای طرح در استانداردهای [[اسکیم|R5RS]]، [[اسکیم|R6RS]] و [[اسکیم|R7RS]] استاندارد شدهاست. تعدادی از پیادهسازیهای رقابتی با استفاده از ماکروها، مانند قواعد سینتکس، حالت نحوی، تغییر نامصریح، و بسته شدن نحوی وجود دارد. هر دو <code>syntax-rules</code> و <code>syntax-case</code> در استانداردهای Scheme استاندارد شدهاست. |
||
اخیراً، racket مفاهیم بهداشتی ماکرو با یک " برج ارزیابان " را ترکیب کردهاست، به طوریکه زمان توسعه معنایی یک سیستم ماکرو، زمان اجرای معمولی یک بلوک دیاگرام دیگر است<ref>{{Cite news|url=http://www.cs.utah.edu/plt/publications/macromod.pdf|title=Composable and compilable macros: you want it when?|last=Flatt|first=Matthew}}</ref> و نشان داد که چگونه تجزیه و تحلیل را در یک زبان غیر پرانتز اعمال کرد.<ref>{{Cite news|url=http://www.cs.utah.edu/plt/publications/gpce12-rf.pdf|title=Honu: Syntactic Extension for Algebraic Notation through Enforestation|last=Rafkind|first=Jon|last2=Flatt|first2=Matthew}}</ref> |
|||
تعدادی از |
تعدادی از زبانها غیر از Scheme یا ماکروهای بهداشتی را اعمال میکنند یا سیستمهای بهداشتی جزئی را اجرا میکنند. نمونههایی از [[اسکالا|Scala]]، [[راست (زبان برنامهنویسی)|Rust]]، [[الیکسیر (زبان برنامهنویسی)|Elixir]]، [[جولیا|Julia]] , Dylan و Nemerle هستند. |
||
=== |
=== برنامههای کاربردی === |
||
; ارزیابی سفارش |
|||
: سیستمهای ماکرو کاربردهای مختلفی دارند. قادر به انتخاب نوع ارزیابی (ارزیابی [[ارزیابی کندرو|تنبل]] و عملکرد غیر سخت) ایجاد سازههای نحوی جدید (نظیر ساختارهای کنترل) است که از آنهایی که در زبان ساخته شدهاند غیرقابلتشخیص باشند. به عنوان مثال، در گویش لیسپ که دارای <code>cond</code> اما فاقد <code>if</code>، برای تعریف دوم استفاده از ماکروها امکانپذیر است.. به عنوان مثال، Scheme هم دارای continuations و هم hygienic macros است که برنامهنویس را قادر میسازد که کنترل انتزاعی خود را مانند حلقه looping و حلقه خروجی اولیه، بدون نیاز به ساخت آنها در زبان، طراحی کند. |
|||
; زبانهای زیر داده و زبانهای خاص دامنه |
|||
: ماکروها، امکان تعریف زبانهای دادهای که بلافاصله در کد تهیه میشوند را فراهم میکند، که به این معنی است که سازههای مانند ماشینهای حالت را میتوان بهشیوهای اجرا کرد که هم طبیعی و هم کارآمد باشد.<ref><div> [http://www.cs.brown.edu/~sk/Publications/Papers/Published/sk-automata-macros/ مقاله دانشگاه براون درباره ماکروهای اتوماتیک] </div></ref> |
|||
; '''ساختارهای اتصال''' |
|||
: ماکروها همچنین میتواند برای معرفی ساختارهای اتصال جدید مورد استفاده قرارگیرند. شناختهشدهترین مثال، تبدیل شدن به کاربرد یک تابع به مجموعهای از آرگمانها است. |
|||
فرضیات نشان میدهند که این سه مقوله از استفاده قانونی اولیه ازماکروها در چنین سیستمی استفاده میکنند. برخی دیگر استفاده از ماکروها را مانند anaphoric macros در سیستمهای ماکرو که غیربهداشتی هستند یا تغییر شکل غیربهداشتی را ممکن میسازند، پیشنهاد کردهاند. |
|||
; ارزیابی سفارش |
|||
: سیستمهای ماکرو کاربردهای مختلفی دارند.قادر به انتخاب نوع ارزیابی (ارزیابی [[ارزیابی کندرو|تنبل]] و عملکرد غیر سخت ) ایجاد سازههای نحوی جدید (نظیر ساختارهای کنترل ) است که از آنهایی که در زبان ساخته شدهاند غیرقابلتشخیص باشند. به عنوان مثال، در گویش لیسپ که دارای <code>cond</code> اما فاقد <code>if</code>،برای تعریف دوم استفاده از ماکروها امکان پذیر است.. به عنوان مثال، Scheme هم دارای continuations و هم hygienic macros است که برنامهنویس را قادر میسازد که کنترل انتزاعی خود را مانند حلقه looping و حلقه خروجی اولیه، بدون نیاز به ساخت آنها در زبان،طراحی کند. |
|||
; زبانهای زیر داده و زبانهای خاص دامنه |
|||
: ماکروها، امکان تعریف زبانهای دادهای که بلافاصله در کد تهیه میشوند را فراهم میکند، که به این معنی است که سازههای مانند ماشینهای حالت را می توان بهشیوهای اجرا کرد که هم طبیعی و هم کارآمد باشد.<ref><div> [http://www.cs.brown.edu/~sk/Publications/Papers/Published/sk-automata-macros/ مقاله دانشگاه براون درباره ماکروهای اتوماتیک] </div></ref> |
|||
; '''ساختارهای اتصال''' |
|||
: ماکروها همچنین میتواند برای معرفی ساختارهای اتصال جدید مورد استفاده قرارگیرند. شناختهشدهترین مثال، تبدیل شدن به کاربرد یک تابع به مجموعهای از آرگمانها است. |
|||
تعامل بین ماکروها و دیگر ویژگیهای زبان یک حوزه مفید از تحقیق بودهاست. برای مثال، مؤلفهها و ماژولها برای برنامهنویسی در مقیاس بزرگ مفید هستند، امابرهمکنش ماکروها و این ساختارها باید برای استفاده آنها با هم تعریف شوند. ماژول و سیستمهای جزئی که میتوانند با ماکروها تعامل داشته باشند برای Scheme و سایر زبانها با ماکرو پیشنهاد شدهاند. به عنوان مثال، زبان racket مفهوم یک سیستم ماکرو را به یک برج نحوی بسطمیدهد که در آن ماکروها را میتوان با زبان از جمله ماکروها، با استفاده از بهداشتبرای تضمین این که لایههای نحوی متمایز هستند و اجازه دادن ماژول برای صادراتماکروها به حوزههای دیگر را میدهد، بسط میدهد. |
|||
فرضیات نشان میدهند که این سه مقوله از استفاده قانونی اولیه ازماکروها در چنین سیستمی استفاده میکنند. برخی دیگر استفاده از ماکروها را مانند anaphoric macros در سیستمهای ماکرو که غیربهداشتی هستند و یا تغییر شکل غیربهداشتی را ممکن میسازند،پیشنهاد کردهاند. |
|||
== ماکروها برای نرمافزار مستقل ماشین == |
|||
تعامل بین ماکروها و دیگر ویژگیهای زبان یک حوزه مفید از تحقیق بودهاست. برای مثال، مولفهها و ماژول ها برای برنامهنویسی در مقیاس بزرگ مفید هستند، امابرهمکنش ماکروها و این ساختارها باید برای استفاده آنها با هم تعریف شوند. ماژول و سیستم های جزئی که می توانند با ماکروها تعامل داشته باشند برای Scheme و سایر زبان ها با ماکرو پیشنهاد شده اند. به عنوان مثال، زبان racket مفهوم یک سیستم ماکرو را به یک برج نحوی بسطمیدهد که در آن ماکروها را می توان با زبان از جمله ماکروها، با استفاده از بهداشتبرای تضمین این که لایههای نحوی متمایز هستند و اجازه دادن ماژول برای صادراتماکروها به حوزههای دیگر را میدهد، بسط میدهد. |
|||
ماکروها معمولاً برای نگاشت یک رشته کوتاه (فراخوانی ماکرو) به یک توالی طولانیتر از دستورالعملها مورد استفاده قرار میگیرند. یکی دیگر که کمتر متداول است، استفاده از ماکروها این است که معکوس شود: نگاشت یک توالی دستورالعملها به یک رشته ماکرو. این رویکرد توسط سیستم برنامهنویسی موبایل STAGE۲ اتخاذ شد، که از یک کامپایلر ماکروی ابتدایی (به نام SIMCMP)استفاده میکرد تا یک [[مجموعه دستورالعمل]] خاص از یک کامپیوتر دادهشده به counterpart macros را نگاشت کند. برنامههای کاربردی (بهطور خاص کامپایلرها) که در این ماکروها مستقل از دستگاه نوشته شدهاست، بدون تغییر در هر کامپیوتری که مجهز به کامپایلر ماکروی اولیه است اجرا میشود. اولین برنامه کاربردی که در چنین زمینه ای اجرا میشود، یک کامپایلر ماکرو پیچیدهتر و قدرتمند است که در زبان ماکروی مستقل از دستگاه نوشته شدهاست. این کامپایلر ماکرو برای خودش، به روش بوت استرپ، برای تولید یک نسخه ترجمهشده و بسیار کارآمدتر از خودش استفاده میشود. مزیت این رویکرد این است که برنامههای پیچیده را میتوان از یک کامپیوتر به یک کامپیوتر بسیار متفاوت با تلاش بسیار کمی (برای هر معماری ماشین هدف، فقط نوشتن یک compiler ابتدایی)منتقل کرد.<ref>{{Cite journal|last=Orgass|first=Richard J.|last2=William M. Waite|date=September 1969|title=A base for a mobile programming system|url=http://doi.acm.org/10.1145/363219.363226|journal=Communications of the ACM|location=New York, NY, USA|publisher=ACM|volume=12|issue=9|pages=507–510|doi=10.1145/363219.363226}}</ref><ref>{{Cite journal|last=Waite|first=William M.|date=July 1970|title=The mobile programming system: STAGE2|url=http://doi.acm.org/10.1145/362686.362691|journal=Communications of the ACM|location=New York, NY, USA|publisher=ACM|volume=13|issue=7|pages=415–421|doi=10.1145/362686.362691}}</ref> ظهور زبانهای برنامهنویسی مدرن، به خصوص C، که کامپایلرها در تمام رایانهها در دسترس هستند، این رویکرد را بیفایده کردهاست. با این وجود، این یکی از اولین نمونه از بوت استرپینگ کامپایلر بود. |
|||
== '''ماکروها برای نرم افزار مستقل ماشین''' == |
|||
ماکروها معمولا برای نگاشت یک رشته کوتاه (فراخوانی ماکرو)به یک توالی طولانیتر از دستورالعملها مورد استفاده قرار میگیرند. یکی دیگر که کمتر متداول است، استفاده از ماکروها این است که معکوس شود: نگاشت یک توالی دستورالعملها به یک رشته ماکرو. این رویکرد توسط سیستم برنامهنویسی موبایل STAGE۲ اتخاذ شد، که از یک کامپایلر ماکروی ابتدایی (به نام SIMCMP)استفاده میکرد تا یک مجموعه دستورالعمل خاص از یک کامپیوتر دادهشده به counterpart macros را نگاشت کند. برنامه های کاربردی (به طور خاص کامپایلرها) که در این ماکروها مستقل از دستگاه نوشته شده است، بدون تغییر در هر کامپیوتری که مجهز به کامپایلر ماکروی اولیه است اجرا می شود. اولین برنامه کاربردی که در چنین زمینه ای اجرا می شود، یک کامپایلر ماکرو پیچیده تر و قدرتمند است که در زبان ماکروی مستقل از دستگاه نوشته شده است. این کامپایلر ماکرو برای خودش، به روش بوت استرپ، برای تولید یک نسخه ترجمهشده و بسیار کارآمدتر از خودش استفاده میشود. مزیت این رویکرد این است که برنامههای پیچیده را می توان از یک کامپیوتر به یک کامپیوتر بسیار متفاوت با تلاش بسیار کمی (برای هر معماری ماشین هدف، فقط نوشتن یک compiler ابتدایی)منتقل کرد. <ref>{{Cite journal|last=Orgass|first=Richard J.|last2=William M. Waite|date=September 1969|title=A base for a mobile programming system|url=http://doi.acm.org/10.1145/363219.363226|journal=Communications of the ACM|location=New York, NY, USA|publisher=ACM|volume=12|issue=9|pages=507–510|doi=10.1145/363219.363226}}</ref> <ref>{{Cite journal|last=Waite|first=William M.|date=July 1970|title=The mobile programming system: STAGE2|url=http://doi.acm.org/10.1145/362686.362691|journal=Communications of the ACM|location=New York, NY, USA|publisher=ACM|volume=13|issue=7|pages=415–421|doi=10.1145/362686.362691}}</ref> ظهور زبانهای برنامهنویسی مدرن، به خصوص C، که کامپایلرها در تمام رایانهها در دسترس هستند، این رویکرد را بیفایده کردهاست. با این وجود، این یکی از اولین نمونه از بوت استرپینگ کامپایلر بود . |
|||
== زبان اسمبلی == |
== زبان اسمبلی == |
||
در حالی که دستورالعملهای ماکرو را |
در حالی که دستورالعملهای ماکرو را میتوان توسط برنامهنویس برای هر مجموعه دستورها برنامه اسمبلر محلی تعریف کرد، معمولاً ماکروها با کتابخانههای ماکرو مرتبط با سیستم عملیاتی که امکان دسترسی بهتوابع سیستمعامل را فراهم میکند، مرتبط هستند. مانند: |
||
* دسترسی محیطی توسط روشهای دسترسی (از جمله ماکروهای مانند OPEN, CLOSE, READ و WRITE) |
|||
* توابع سیستم عامل مانند ATTACH, WAIT و POST برای ایجاد و هماهنگ سازی زیر کارها.<ref>{{Cite web|url=https://www.unf.edu/~cwinton/html/cop3601/s10/class.notes/asm6-Macros.pdf|title=University of North Florida|access-date=۳۰ ژانویه ۲۰۱۹|archive-date=۲۹ اوت ۲۰۱۷|archive-url=https://web.archive.org/web/20170829171358/http://www.unf.edu/~cwinton/html/cop3601/s10/class.notes/asm6-Macros.pdf|url-status=dead}}</ref> بهطور معمول چنین ماکروها به کد اجرایی گسترش مییابند، |
|||
* یک لیست از تعریف دستورالعملهای ''ثابت''، به عنوان مثال، برای DCB ماکرو - DTF (تعریف فایل) برای DOS<ref>{{Cite web|url=https://www.ibm.com/support/knowledgecenter?origURL=api/redirect/zvm/v5r4/index.jsp|title=DTF (DOS/VSE)}}</ref> - یا ترکیبی از کد و ثوابت، با جزییات توسعه، بسته به پارامترهای دستورالعمل ماکرو (مانند ارجاع به فایل و یک حوزه داده برای دستور خواندن)؛ |
|||
* کد قابلاجرا اغلب در یک شاخه یا دستورالعمل ثبت لینک برای فراخوانی یک برنامه روتین یا یک ناظر فراخوانی به فراخوانی سیستم عملیاتی بهطور مستقیم پایان مییابد. |
|||
در سیستمهای عملیاتی قدیمیتر مثل آنهایی که در پردازندههای مرکزی IBM مورد استفاده قرار میگرفتند، عملکرد سیستمعامل کامل تنها برای برنامههای زبانی assembler در دسترس بود (مگر اینکه از subroutines زبان اسمبلی استفاده شود)، همانطور که دستورالعملهای استاندارد ماکرو معمولاً دارای همتایان دارای سطح بالا نیستند. |
|||
* دسترسی محیطی توسط روشهای دسترسی (از جمله ماکروهای مانند OPEN، CLOSE، READ و WRITE) |
|||
* توابع سیستم عامل مانند ATTACH، WAIT و POST برای ایجاد و هماهنگ سازی زیر کارها. <ref>{{Cite web|url=https://www.unf.edu/~cwinton/html/cop3601/s10/class.notes/asm6-Macros.pdf|title=University of North Florida}}</ref> به طور معمول چنین ماکروها به کد اجرایی گسترش می یابند، |
|||
* یک لیست از تعریف دستورالعمل های ''ثابت'' ، به عنوان مثال، برای DCB ماکرو - DTF (تعریف فایل) برای DOS <ref>{{Cite web|url=https://www.ibm.com/support/knowledgecenter?origURL=api/redirect/zvm/v5r4/index.jsp|title=DTF (DOS/VSE)}}</ref> - یا ترکیبی از کد و ثوابت،با جزییات توسعه، بسته به پارامترهای دستورالعمل ماکرو (مانند ارجاع به فایل و یک حوزه داده برای دستور خواندن)؛ |
|||
* کد قابلاجرا اغلب در یک شاخه و یا دستورالعمل ثبت لینک برای فراخوانی یک برنامه روتین و یا یک ناظر فراخوانی به فراخوانی سیستم عملیاتی به طور مستقیم پایان مییابد. |
|||
== تاریخ == |
|||
در سیستمهای عملیاتی قدیمیتر مثل آنهایی که در پردازندههای مرکزی IBM مورد استفاده قرار میگرفتند، عملکرد سیستمعامل کامل تنها برای برنامههای زبانی assembler در دسترس بود (مگر اینکه از subroutines زبان اسمبلی استفاده شود)، همانطور که دستورالعملهای استاندارد ماکرو معمولا دارای همتایان دارای سطح بالا نیستند. |
|||
در اواسط دهه ۱۹۵۰، زمانی که برنامهنویسی [[زبان اسمبلی|مونتاژ]] مکرر برای نوشتن برنامه [[رایانه|های رایانههای دیجیتال]] مورد استفاده قرار گرفت، استفاده از '''دستورالعملهای ماکرو''' برای دو هدف اصلی آغاز شد: کاهش مقدار کدگذاری برنامه که میبایست با ایجاد چندین بیانیه زبان اسمبلی از یک دستور ماکرو و اجرای استانداردهای نوشتن برنامه، نوشته شود، به عنوان مثال، تعیین فرمانهای [[ورودی/خروجی|ورودی / خروجی]] به روشهای استاندارد.<ref>{{Cite web|url=http://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.asma400/asmr102115.htm|title=IBM Knowledge Center|website=IBM Knowledge Center}}</ref> دستورالعملهای ماکرو بهطور مؤثر یک قدم میانی بین برنامهنویسی زبان اسمبلی و زبانهای برنامهنویسی سطح [[زبان برنامهنویسی سطح بالا|بالا بود]] که بعد از آن، مثل FORTRAN و کوبول معرفی شدند.. دو مورد از اولین تأسیسات برنامهنویسی برای توسعه «زبانهای ماکرو» برای تولید IBM ۷۰۵، در شرکت شیمیایی داو در دلاور و فرماندهی متریال هوایی، ballistics Missile Logistics در کالیفرنیا بود. یک دستور ماکرو که در فرمت زبان اسمبلی هدف نوشته میشود، توسط یک مترجم ماشینی پردازش میشود، که برای تولید یک یا چند دستورالعمل زبان اسمبلی در کنار برنامه assembler پردازش میشود که دستورالعمل زبان اسمبلی را به دستورالعملهای زبان ماشین ترجمه میکند. [۲۲] |
|||
در اواخر دهه ۱۹۵۰، زبان ماکرو توسط Macro Assemblers دنبال شد. این ترکیبی از هر دو برنامه بود که در یک برنامه برای هر دو عمل میکرد، که از پیشپردازنده و یک موتاژکننده تشکیل شده بود.<ref name="cisco">{{Cite web|url=http://www.cisco.com/c/en/us/td/docs/ios/sw_upgrades/interlink/r2_0/api_ref/ammac.html#wp1686|title=Assembler Language Macro Instructions|website=Cisco}}</ref> ین به برنامه نویسان زبان اسمبلی اجازه داد تا زبان ماکروی خود را پیاده کنند و قابلیت انتقال محدود کدها را بین دو ماشین اجرا کنند که همان CPU را در سیستمعامل متفاوت اجرا میکردند، برای مثال، نسخههای ابتدایی MSDOS و CPM - ۸۶. کتابخانه ماکرو باید برای هر ماشین هدف نوشته شود، نه برای برنامه کلی زبان اسمبلی. توجه داشته باشید که اسمبلرهای قدرتمندتر میتوانند از ساختارهای مونتاژ مشروط در دستورالعملهای ماکرو استفاده کنند که میتوانند کدهای مختلف را روی دستگاههای مختلف یا سیستم عاملهای مختلف تولید کنند و نیاز به کتابخانههای مختلف را کاهش دهند. |
|||
== '''تاریخ''' == |
|||
در اواسط دهه 1950، زمانی که برنامه نویسی [[زبان اسمبلی|مونتاژ]] مکرر برای نوشتن برنامه [[رایانه|های رایانه های دیجیتال]] مورد استفاده قرار گرفت، استفاده از '''دستورالعمل های ماکرو''' برای دو هدف اصلی آغاز شد: کاهش مقدار کدگذاری برنامه که میبایست با ایجاد چندین بیانیه زبان اسمبلی از یک دستور ماکرو و اجرای استانداردهای نوشتن برنامه، نوشته شود، به عنوان مثال، تعیین فرمانهای ورودی / خروجی به روشهای استاندارد.<ref>{{Cite web|url=http://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.asma400/asmr102115.htm|title=IBM Knowledge Center|website=IBM Knowledge Center}}</ref> دستورالعمل های ماکرو به طور موثر یک قدم میانی بین برنامه نویسی زبان اسمبلی و زبان های برنامه نویسی سطح [[زبان برنامهنویسی سطح بالا|بالا بود]] که بعد از آن، مثل FORTRAN و کوبول معرفی شدند.. دو مورد از اولین تاسیسات برنامهنویسی برای توسعه "زبانهای ماکرو" برای تولید IBM ۷۰۵، در شرکت شیمیایی داو در دلاور و فرماندهی متریال هوایی، ballistics Missile Logistics در کالیفرنیا بود. یک دستور ماکرو که در فرمت زبان اسمبلی هدف نوشته میشود، توسط یک مترجم ماشینی پردازش میشود، که برای تولید یک یا چند دستورالعمل زبان اسمبلی در کنار برنامه assembler پردازش میشود که دستورالعمل زبان اسمبلی را به دستورالعملهای زبان ماشین ترجمه میکند. [ ۲۲ ] |
|||
در دهه ۱۹۸۰ و اوایل دهه ۱۹۹۰، رایانههای رومیزی تنها در چند مگاهرتز کار میکردند و برنامههای مونتاژ زبان بهطور معمول برای سرعت بخشیدن به برنامههای نوشته شده در C, Fortran, Pascal و دیگران استفاده میشد. این زبانها در آن زمان، از کنوانسیونهای مختلف تماس استفاده میکردند. **ماکروها میتوانند برای روتینهای رابط نوشته شده در زبان مونتاژ به قسمت اولیهٔ برنامههای نوشته شده در هر زبان نوشته شوند. ** باز هم، کد زبان اسمبلی اصلی همان بود، فقط کتابخانههای ماکرو مورد نیاز برای هرزبان مقصد نوشته میشدند. |
|||
در اواخر دهه 1950، زبان ماکرو توسط Macro Assemblers دنبال شد. این ترکیبی از هر دو برنامه بود که در یک برنامه برای هر دو عمل میکرد، که از پیشپردازنده و یک موتاژ کننده تشکیل شده بود. <ref name="cisco">{{Cite web|url=http://www.cisco.com/c/en/us/td/docs/ios/sw_upgrades/interlink/r2_0/api_ref/ammac.html#wp1686|title=Assembler Language Macro Instructions|website=Cisco}}</ref> ین به برنامه نویسان زبان اسمبلی اجازه داد تا زبان ماکروی خود را پیاده کنند و قابلیت انتقال محدود کدها را بین دو ماشین اجرا کنند که همان CPU را در سیستمعامل متفاوت اجرا میکردند، برای مثال، نسخههای ابتدایی MSDOS و CPM - ۸۶. کتابخانه ماکرو باید برای هر ماشین هدف نوشته شود، نه برای برنامه کلی زبان اسمبلی. توجه داشته باشید که اسمبلرهای قدرتمندتر میتوانند از ساختارهای مونتاژ مشروط در دستورالعمل های ماکرو استفاده کنند که می توانند کد های مختلف را روی دستگاه های مختلف یا سیستم عامل های مختلف تولید کنند و نیاز به کتابخانه های مختلف را کاهش دهند. |
|||
در سیستمهای عملیاتی مدرن مانند یونیکس و مشتقات آن، دسترسی به سیستم از طریق subroutines ارائه میشود که معمولاً توسط کتابخانههای پویا ارائه میشود. زبانهای سطح بالا مانند C، دسترسی جامع به توابع سیستمعامل را ارائه میکنند و نیاز به برنامههای زبانی assembler برای این قابلیت را فراهم میکنند. |
|||
در دهه 1980 و اوایل دهه 1990، رایانه های رومیزی تنها در چند مگاهرتز کار می کردند و برنامه های مونتاژ زبان به طور معمول برای سرعت بخشیدن به برنامه های نوشته شده در C، Fortran، Pascal و دیگران استفاده می شد. این زبانها در آن زمان، از کنوانسیونهای مختلف تماس استفاده می کردند. **ماکروها می توانند برای روتین های رابط نوشته شده در زبان مونتاژ به قسمت اولیه ی برنامه های نوشته شده در هر زبان نوشته شوند.** باز هم، کد زبان اسمبلی اصلی همان بود، فقط کتابخانههای ماکرو مورد نیاز برای هرزبان مقصد نوشته میشدند. |
|||
== جستارهای وابسته == |
|||
در سیستمهای عملیاتی مدرن مانند یونیکس و مشتقات آن، دسترسی به سیستم از طریق subroutines ارایه میشود که معمولا توسط کتابخانههای پویا ارایه میشود. زبانهای سطح بالا مانند C، دسترسی جامع به توابع سیستمعامل را ارایه میکنند و نیاز به برنامههای زبانی assembler برای این قابلیت را فراهم میکنند. |
|||
* ماکروهای نابغه |
|||
* {{Section link|Assembly language|Macros}} (منشأ مفهوم ماکرو) |
|||
* برنامهریزی قابل برنامهریزی |
|||
* ماکروهای بهداشتی |
|||
* برنامهنویسی توسط تظاهرات |
|||
* درونیابی رشته |
|||
== منابع == |
|||
== همچنین نگاه کنید == |
|||
{{پانویس|۲}} |
|||
* <references responsive="" /> |
|||
== پیوند به بیرون == |
|||
* ماکروهای نابغه |
|||
* [http://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.asma400/macifmt.htm نحوه نوشتن دستورالعملهای ماکرو] |
|||
* {{Section link|Assembly language|Macros}} (منشأ مفهوم ماکرو) |
|||
* [http://meseec.ce.rit.edu/eecc250-winter99/250-2-2-2000.pdf مؤسسه تکنولوژی روچستر، استادان پاورپوینت] |
|||
* برنامه ریزی قابل برنامه ریزی |
|||
* ماکروهای بهداشتی |
|||
* برنامه نویسی توسط تظاهرات |
|||
* درونیابی رشته |
|||
== '''منابع''' == |
|||
* |
|||
<references group="" responsive=""></references> |
|||
== لینک های خارجی == |
|||
* [http://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.asma400/macifmt.htm نحوه نوشتن دستورالعمل های ماکرو] |
|||
* [http://meseec.ce.rit.edu/eecc250-winter99/250-2-2-2000.pdf موسسه تکنولوژی روچستر، استادان پاورپوینت] |
|||
[[رده:کد منبع]] |
|||
[[رده:ساختارهای برنامهنویسی]] |
[[رده:ساختارهای برنامهنویسی]] |
||
[[رده:نرمافزار اتوماسیون]] |
|||
[[رده:صفحات با ترجمه بازبینینشده]] |
[[رده:صفحات با ترجمه بازبینینشده]] |
||
[[رده:علوم رایانه]] |
|||
[[رده:کد منبع]] |
نسخهٔ کنونی تا ۹ ژوئن ۲۰۲۴، ساعت ۰۱:۰۵
یک ماکرو (به انگلیسی: macro) در علوم رایانه یک الگو یا قاعده است که مشخص میکند چگونه بر اساس یک فرایند از قبل معین شده، یک ترتیب ورودی بخصوص (که معمولاً ترتیبی از نویسهها هستند) باید به یک ترتیب خروجی جایگزینشده (که آن نیز معمولاً ترتیبی از نویسهها میباشد) نگاشت (تناظر) یابد.[۱]
کلمهٔ ماکرو کوتاه شده عبارت «macroinstruction» به معنی «دستورات ماکرو» است. در زبان یونانی ماکرو (μακρός) به معنی «بزرگ یا کلان» (long) میباشد.[۱]
فرایندی نگاشتی که در آن «ماکروی استفاده شده» به یک «ترتیب خاص» نمونهبرداری (تبدیل) میشود، به عنوان «گسترش ماکرو» شناخته میشود. امکانات نوشتن ماکرو میتواند به عنوان یک نرمافزار کاربردی یا بخشی از زبان برنامهنویسی فراهم شود. در حالت اول، از ماکروها برای ساخت فعالیتهایی به وسیلهٔ برنامههای کم تکرارتر استفاده میشد. در حالات دوم، آنها یک ابزاراند که برنامهنویس امکان استفاده مجدد از کد، یا حتی امکان طراحی زبانهای خاص منظوره را میدهند.[۱]
از ماکرو برای فراهم ساختن ترتیبی از دستورالعملهای محاسباتی برای برنامهنویس، به صورت یک عبارت برنامه ای منفرد، استفاده میشود. استفاده از ماکروها باعث کمتر «مستعد خطر بودن» و «کمتر خستهکننده بودن» برنامهنویسی استفاده میشود.[۲][۳] (از این جهت، به آنها ماکرو میگویند، که یک بلاک «بزرگ» کد میتواند از یک ترتیب «کوچک» از نویسهها گسترش بیابند). ماکروها اکثراً استفاده از پراسنجههای کلمه کلیدی یا موقعیتی (که مشخص میکنند که برنامهٔ اتصال شرطی چه چیزی را تولید میکند) را مجاز میداند و از آنها برای ساخت برنامههای کامل یا مجموعه برنامههایی برای سیستم عامل، سکوی رایانش، یا انواع دیگر برنامه استفاده میکند. عبارت «ماکرو» از «macro instruction» گرفته شدهاست، و از این گسترشها در گذشته در اساس برای ساخت کدهای زبان اسمبلی استفاده میشد.[۱]
ماکروهای صفحه کلید و ماوس[ویرایش]
ماکروهای صفحه کلید و ماکروهای ماوس اجازه میدهد که توالیهای کوتاهی از عملکردهای کلیدی و ماوس برای تبدیل شدن به توالیهای کلیدی و اقدامات ماوس دیگر، معمولاً بیشتر وقت گیر باشند. به این صورت، استفادههای مکرر یا دنبالههای تکراری از عملکردهای کلیدی و حرکتهای موس میتواند به صورت خودکار انجام شود. برنامههای دیگر برای درست کردن این ماکروها را ضبظ کنندهٔ ماکرو مینامند.
در طول دهه ۱۹۸۰، برنامههای مارکرو - اول 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 (منشأ مفهوم ماکرو)
- برنامهریزی قابل برنامهریزی
- ماکروهای بهداشتی
- برنامهنویسی توسط تظاهرات
- درونیابی رشته
منابع[ویرایش]
- ↑ ۱٫۰ ۱٫۱ ۱٫۲ ۱٫۳ "Macro (computer science)". Wikipedia (به انگلیسی). 2020-02-06.
- ↑ 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.
- ↑ Strachey, Christopher (October 1965). "A General Purpose Macrogenerator". Computer Journal. 8 (3): 225–241. doi:10.1093/comjnl/8.3.225.
- ↑ "Runescape: The Massive Online Adventure Game by Jagex Ltd". Retrieved 2008-04-03.
- ↑
- ↑
- ↑
- ↑
- ↑
- ↑ Marshall, Joe. "untitled email". Retrieved May 3, 2012.
- ↑ "AIM-057, MACRO Definitions for LISP, Timothy P. Hart".
- ↑ Flatt, Matthew. "Composable and compilable macros: you want it when?" (PDF).
- ↑ Rafkind, Jon; Flatt, Matthew. "Honu: Syntactic Extension for Algebraic Notation through Enforestation" (PDF).
- ↑
- ↑ 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.
- ↑ 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.
- ↑ "University of North Florida" (PDF). Archived from the original (PDF) on 29 August 2017. Retrieved 30 January 2019.
- ↑ "DTF (DOS/VSE)".
- ↑ "IBM Knowledge Center". IBM Knowledge Center.
- ↑ "Assembler Language Macro Instructions". Cisco.