ماكرو (علوم الحاسوب)

في برمجة الحاسوب ، الماكرو (اختصارًا لـ " تعليمات الماكرو "؛ من اليونانية μακρο - " طويل، كبير " [ 1 ] ) هو قاعدة أو نمط يحدد كيفية ربط مُدخل معين بمخرج بديل. يُعرف تطبيق الماكرو على مُدخل ما باسم توسيع الماكرو .
قد يكون المدخل والمخرج عبارة عن سلسلة من الرموز المعجمية أو الأحرف ، أو شجرة بناء الجملة . تدعم تطبيقات البرمجيات وحدات الماكرو للأحرف لتسهيل استدعاء تسلسلات الأوامر الشائعة . كما تدعم بعض لغات البرمجة وحدات الماكرو للرموز والأشجار لتمكين إعادة استخدام التعليمات البرمجية أو لتوسيع اللغة، وأحيانًا للغات خاصة بمجالات محددة .
تُستخدم وحدات الماكرو لتوفير سلسلة من تعليمات الحوسبة للمبرمج كعبارة برمجية واحدة ، مما يجعل عملية البرمجة أقل إرهاقًا وأقل عرضة للأخطاء. [ 2 ] [ 3 ] ولذلك، تُسمى "وحدات ماكرو" لأنه يمكن توسيع كتلة كبيرة من التعليمات البرمجية من سلسلة صغيرة من الأحرف. غالبًا ما تسمح وحدات الماكرو بمعاملات موضعية أو كلمات مفتاحية تُحدد ما يُولّده برنامج التجميع الشرطي ، وقد استُخدمت لإنشاء برامج كاملة أو مجموعات برامج وفقًا لمتغيرات مثل نظام التشغيل أو المنصة أو عوامل أخرى. يُشتق المصطلح من "تعليمات الماكرو"، وقد استُخدمت هذه التوسعات في الأصل في توليد كود لغة التجميع .
وحدات الماكرو للوحة المفاتيح والماوس
تتيح وحدات الماكرو الخاصة بلوحة المفاتيح والماوس تحويل تسلسلات قصيرة من ضغطات المفاتيح وحركات الماوس إلى تسلسلات أخرى، عادةً ما تكون أكثر استهلاكًا للوقت. وبهذه الطريقة، يمكن أتمتة التسلسلات المتكررة أو المستخدمة بكثرة من ضغطات المفاتيح وحركات الماوس . تُسمى البرامج المنفصلة لإنشاء هذه الوحدات مسجلات الماكرو . [ 4 ]
خلال ثمانينيات القرن الماضي، لاقت برامج الماكرو - التي كانت تُعرف في البداية باسم SmartKey ، ثم SuperKey، وKeyWorks، وProkey - رواجًا كبيرًا، بدايةً كوسيلة لتنسيق النصوص تلقائيًا ، ثم لمجموعة متنوعة من مهام إدخال المستخدم. اعتمدت هذه البرامج على نمط التشغيل "الإنهاء والبقاء في الذاكرة" وطُبقت على جميع مدخلات لوحة المفاتيح، بغض النظر عن سياقها. وقد تراجع استخدامها إلى حد ما مع ظهور واجهات المستخدم التي تعمل بالماوس وتوفر وحدات الماكرو الخاصة بلوحة المفاتيح والماوس في تطبيقات مثل معالجات النصوص وجداول البيانات ، مما أتاح إنشاء وحدات ماكرو خاصة بلوحة المفاتيح تتناسب مع كل تطبيق.
يمكن استخدام وحدات الماكرو في ألعاب تقمص الأدوار الجماعية عبر الإنترنت (MMORPGs) لأداء مهام متكررة ولكنها مربحة، وبالتالي تجميع الموارد. ولأن هذا يتم دون جهد بشري، فقد يُخلّ بتوازن اقتصاد اللعبة. لهذا السبب، يُعد استخدام وحدات الماكرو انتهاكًا لشروط الخدمة أو اتفاقية ترخيص المستخدم النهائي لمعظم ألعاب MMORPGs، ويبذل مديروها جهودًا كبيرة لقمعها. [ 5 ]
وحدات الماكرو البرمجية والتطبيقات
تُسمى وحدات الماكرو الخاصة بلوحة المفاتيح والماوس، والتي يتم إنشاؤها باستخدام ميزات الماكرو المدمجة في التطبيق، أحيانًا بوحدات ماكرو التطبيق . ويتم إنشاؤها بتنفيذ التسلسل مرة واحدة والسماح للتطبيق بتسجيل الإجراءات. وقد توجد أيضًا لغة برمجة ماكرو أساسية، غالبًا ما تكون لغة برمجة نصية ، مع إمكانية الوصول المباشر إلى ميزات التطبيق. [ 6 ]
يتبع محرر النصوص Emacs (اختصارًا لـ "وحدات الماكرو للتحرير") هذه الفكرة إلى حد كبير. في الواقع، يتكون معظم المحرر من وحدات ماكرو. صُمم Emacs في الأصل كمجموعة من وحدات الماكرو بلغة التحرير TECO ، ثم نُقل لاحقًا إلى لهجات لغة Lisp . [ 7 ]
يُعدّ Vim (وهو مُحرّر نصوص آخر للمبرمجين، مُشتقّ من vi ) مُزوّدًا أيضًا بخاصية تنفيذ وحدات الماكرو للوحة المفاتيح. يُمكنه تسجيل ما يكتبه المستخدم على لوحة المفاتيح في سجلّ (ماكرو)، ويُمكن إعادة تشغيله أو تعديله تمامًا مثل وحدات ماكرو VBA في Microsoft Office. كما يحتوي Vim على لغة برمجة نصية تُسمى Vimscript [ 8 ] لإنشاء وحدات الماكرو.
لغة البرمجة Visual Basic for Applications (VBA) هي لغة برمجة مضمنة في حزمة Microsoft Office من الإصدار 97 وحتى الإصدار 2019 (مع أنها كانت متوفرة في بعض مكونات Office قبل الإصدار 97). إلا أن وظيفتها تطورت وحلت محل لغات الماكرو التي كانت مضمنة في بعض هذه التطبيقات.
يدعم برنامج XEDIT ، الذي يعمل على مكون نظام مراقبة المحادثات (CMS) في نظام التشغيل VM ، وحدات الماكرو المكتوبة بلغات EXEC و EXEC2 و REXX ، وكانت بعض أوامر CMS في الواقع عبارة عن أغلفة لوحدات ماكرو XEDIT. أما برنامج Hessling Editor (THE)، وهو نسخة جزئية من XEDIT، فيدعم وحدات ماكرو Rexx باستخدام Regina وOpen Object REXX (oorexx). وتستخدم العديد من التطبيقات الشائعة، وبعضها على أجهزة الكمبيوتر الشخصية، لغة Rexx كلغة برمجة نصية. [ 9 ]
فيروس ماكرو
تتمتع لغة VBA بإمكانية الوصول إلى معظم استدعاءات نظام مايكروسوفت ويندوز ، وتُنفَّذ عند فتح المستندات. هذا يجعل كتابة فيروسات الحاسوب باستخدام VBA، والمعروفة باسم فيروسات الماكرو ، أمرًا سهلاً نسبيًا . في منتصف التسعينيات، أصبح هذا النوع من أكثر أنواع فيروسات الحاسوب شيوعًا. مع ذلك، ومنذ أواخر التسعينيات وحتى الآن، تعمل مايكروسوفت على تحديث برامجها باستمرار. إضافةً إلى ذلك، تتصدى برامج مكافحة الفيروسات الحالية لهذه الهجمات فورًا.
ماكرو ذو معلمات وماكرو بدون معلمات
الماكرو المُعَلم هو ماكرو قادر على إدراج كائنات معينة في نطاقه. وهذا يمنح الماكرو بعضًا من قوة الدالة .
كمثال بسيط، في لغة البرمجة C ، هذا ماكرو نموذجي ليس ماكرو مُعامل، أي ماكرو بدون مُعاملات :
#عرّف PI 3.14159
يؤدي هذا PIإلى استبدالها دائمًا 3.14159أينما وردت. ومن ناحية أخرى، إليك مثال على ماكرو مُعَلم:
#define pred(x) ((x)-1)
يعتمد ما يتوسع إليه هذا الماكرو على الوسيط x الذي يتم تمريره إليه. فيما يلي بعض التوسعات الممكنة:
pred(2) → ((2) -1) pred(y+2) → ((y+2) -1) pred(f(5)) → ((f(5))-1)
تُعد وحدات الماكرو ذات المعلمات آلية مفيدة على مستوى المصدر لإجراء التوسيع المضمن ، ولكن في لغات مثل C حيث تستخدم استبدالًا نصيًا بسيطًا، فإنها تحتوي على عدد من العيوب الشديدة مقارنة بالآليات الأخرى لإجراء التوسيع المضمن، مثل الدوال المضمنة .
أما وحدات الماكرو ذات المعلمات المستخدمة في لغات مثل Lisp و PL/I و Scheme ، من ناحية أخرى، فهي أكثر قوة بكثير، وقادرة على اتخاذ قرارات بشأن الكود الذي سيتم إنتاجه بناءً على وسيطاتها؛ وبالتالي، يمكن استخدامها بشكل فعال لتنفيذ توليد الكود في وقت التشغيل .
وحدات الماكرو لاستبدال النصوص
تحتوي لغات مثل C وبعض لغات التجميع على أنظمة ماكرو بدائية، تُنفَّذ كمعالجات مسبقة للمترجم أو المُجمِّع. تعمل ماكرو المعالج المسبق في لغة C عن طريق استبدال نصي بسيط على مستوى الرمز ، وليس على مستوى الحرف. مع ذلك، لا يمكن تنفيذ إمكانيات الماكرو في المُجمِّعات الأكثر تطورًا، مثل مُجمِّع IBM عالي المستوى (HLASM)، باستخدام معالج مسبق؛ إذ يتداخل رمز تجميع التعليمات والبيانات مع رمز تجميع استدعاءات الماكرو.
يُعد نظام TeX للتنضيد الحاسوبي ومشتقاته أحد الاستخدامات الكلاسيكية للماكرو، حيث تعتمد معظم الوظائف على الماكرو. [ 10 ]
MacroML هو نظام تجريبي يسعى إلى التوفيق بين الكتابة الثابتة وأنظمة الماكرو. يحتوي Nemerle على ماكرو بناء جملة مكتوب، وإحدى الطرق الفعالة للتفكير في ماكرو بناء الجملة هذا هي اعتباره عملية حسابية متعددة المراحل .
أمثلة أخرى:
- m4 هو معالج ماكرو متطور قائم بذاته.
- TRAC
- امتداد الماكرو TAL ، لغة سمات القوالب المصاحبة
- SMX: لصفحات الويب
- ML/1 (لغة الماكرو الأولى)
- troff و nroff : لطباعة وتنسيق صفحات دليل يونكس.
- CMS EXEC : لوحدات الماكرو الخاصة بسطر الأوامر ووحدات الماكرو الخاصة بالتطبيقات
- EXEC 2 في نظام مراقبة المحادثات (CMS): لوحدات الماكرو الخاصة بسطر الأوامر ووحدات الماكرو الخاصة بالتطبيقات
- قائمة الأوامر (CLIST) في خيار المشاركة الزمنية (TSO) من IBM : لوحدات الماكرو الخاصة بسطر الأوامر ووحدات الماكرو الخاصة بالتطبيقات
- REXX : لوحدات الماكرو الخاصة بسطر الأوامر ووحدات الماكرو الخاصة بالتطبيقات في أنظمة تشغيل مثل AmigaOS وCMS و OS/2 وTSO
- نص برمجي : لتنسيق المستندات
- أنظمة تشغيل متنوعة ، على سبيل المثال، لينكس
تمت كتابة بعض التطبيقات الرئيسية كوحدات ماكرو نصية يتم استدعاؤها بواسطة تطبيقات أخرى، على سبيل المثال، بواسطة XEDIT في نظام إدارة المحتوى (CMS).
اللغات القابلة للتضمين
يمكن تضمين بعض اللغات، مثل PHP ، في نصوص حرة التنسيق، أو في شفرة المصدر للغات أخرى. وتشبه آلية التعرف على أجزاء الشفرة (على سبيل المثال، وضعها بين قوسين <?php) ?>آلية لغة الماكرو النصية، إلا أنها لغات أكثر قوة وتكاملاً.
وحدات الماكرو الإجرائية
تُكتب وحدات الماكرو في لغة PL/I باستخدام مجموعة فرعية منها: يُنفذ المُصرّف "تعليمات المعالجة المسبقة " أثناء عملية التجميع، ويُشكّل ناتج هذا التنفيذ جزءًا من الكود المُجمّع. تُتيح إمكانية استخدام لغة إجرائية مألوفة كلغة للماكرو قوةً أكبر بكثير من وحدات الماكرو التي تعتمد على استبدال النصوص، ولكن على حساب مُصرّف أكبر حجمًا وأبطأ. قد تُحدث وحدات الماكرو في PL/I، كما هو الحال في العديد من مُجمّعات اللغة، آثارًا جانبية ، مثل تعيين متغيرات يُمكن لوحدات ماكرو أخرى الوصول إليها.
تتميز وحدات الماكرو الخاصة بتقنية الإطارات بصيغة أوامر خاصة بها، ولكنها قادرة أيضًا على احتواء نصوص بأي لغة. كل إطار هو مكون عام ضمن تسلسل هرمي من التجميعات الفرعية المتداخلة، وإجراء لدمج نفسه مع إطارات التجميعات الفرعية (عملية تكرارية تحل تعارضات التكامل لصالح التجميعات الفرعية ذات المستوى الأعلى). تكون المخرجات عبارة عن مستندات مخصصة، عادةً ما تكون وحدات مصدر قابلة للتجميع. تُجنّب تقنية الإطارات انتشار المكونات المتشابهة ولكنها تختلف اختلافًا طفيفًا، وهي مشكلة عانت منها عملية تطوير البرمجيات منذ ابتكار وحدات الماكرو والإجراءات الفرعية .
معظم لغات التجميع لديها إمكانيات ماكرو إجرائية أقل قوة، على سبيل المثال السماح بتكرار كتلة من التعليمات البرمجية N مرة لفك الحلقة ؛ ولكن هذه لها بنية مختلفة تمامًا عن لغة التجميع الفعلية.
وحدات الماكرو التركيبية
لا تستطيع أنظمة الماكرو، مثل معالج C المسبق الموصوف سابقًا، التي تعمل على مستوى الرموز المعجمية، الحفاظ على البنية المعجمية بشكل موثوق. في المقابل، تعمل أنظمة الماكرو التركيبية على مستوى أشجار التركيب المجرد ، وتحافظ على البنية المعجمية للبرنامج الأصلي. وتوجد أكثر تطبيقات أنظمة الماكرو التركيبية شيوعًا في لغات شبيهة بلغة ليسب . وتُعد هذه اللغات مناسبة بشكل خاص لهذا النمط من الماكرو نظرًا لبنيتها الموحدة التي تتضمن أقواسًا (المعروفة باسم تعابير S ). وعلى وجه الخصوص، تُسهّل البنية الموحدة تحديد استدعاءات الماكرو. تُحوّل ماكرو ليسب بنية البرنامج نفسها، مع توفر اللغة الكاملة للتعبير عن هذه التحويلات. على الرغم من شيوع استخدام وحدات الماكرو النحوية في لغات البرمجة الشبيهة بلغة ليسب، إلا أنها متوفرة أيضًا في لغات أخرى مثل برولوج [ 11 ] ، وإرلانج [ 12 ] ، وديلان [ 13 ] ، وسكالا [ 14 ] ، ونيميرل [ 15 ] ، وراست [ 16 ] ، وإليكسير [ 17 ] ، ونيم [ 18 ] ، وهاكس [ 19 ] ، وجوليا [ 20 ] . كما تتوفر أيضًا كإضافات خارجية للغة جافا سكريبت [ 21 ] ولغة سي شارب [ 22 ] .
وحدات الماكرو المبكرة في لغة Lisp
قبل ظهور وحدات الماكرو في لغة ليسب، كانت تحتوي على ما يُسمى بـ FEXPRs ، وهي عبارة عن عوامل شبيهة بالدوال، لا تُمثل مدخلاتها القيم المحسوبة بواسطة الوسائط، بل الصيغ النحوية لتلك الوسائط، بينما تُمثل مخرجاتها القيم المستخدمة في الحساب. بعبارة أخرى، تم تنفيذ FEXPRs على نفس مستوى EVAL، مما وفر نافذةً إلى طبقة التقييم الفوقي. وقد وُجد عمومًا أن هذا النموذج صعب الفهم والتحليل بفعالية. [ 23 ]
في عام 1963، اقترح تيموثي هارت إضافة وحدات الماكرو إلى لغة ليسب 1.5 في مذكرة الذكاء الاصطناعي رقم 57: تعريفات الماكرو للغة ليسب. [ 24 ]
وحدات الماكرو الإشارية
الماكرو الإشاري هو نوع من أنواع الماكرو البرمجية التي تلتقط عمدًا صيغةً ما مُقدمة للماكرو، والتي يمكن الإشارة إليها بواسطة إشارتها (تعبير يشير إلى آخر). ظهرت الماكرو الإشارية لأول مرة في كتاب بول غراهام "On Lisp"، واسمها إشارة إلى الإحالة اللغوية - استخدام الكلمات كبديل للكلمات السابقة.
العناصر الغذائية الأساسية الصحية
في منتصف الثمانينيات، قدمت عدة أوراق بحثية [ 25 ] [ 26 ] مفهوم التوسيع الصحي للماكرو (hygienic macrosyntax-rules expand )، وهو نظام قائم على الأنماط حيث تكون البيئات النحوية لتعريف الماكرو واستخدامه منفصلة، مما يسمح لمُعرّفي الماكرو ومستخدميه بعدم القلق بشأن التقاط المتغيرات غير المقصود (انظر الشفافية المرجعية ). تم توحيد الماكرو الصحي للغة Scheme في معايير R5RS و R6RS و R7RS . يوجد عدد من التطبيقات المتنافسة للماكرو الصحي، مثل syntax-rulesإعادة syntax-caseالتسمية الصريحة والإغلاقات النحوية. وقد تم توحيد كل من syntax-rulesإعادة التسمية الصريحة والإغلاقات النحوية syntax-caseفي معايير Scheme.
في الآونة الأخيرة، جمعت لغة Racket بين مفهومي وحدات الماكرو الصحية و"برج المُقيِّمات"، بحيث يكون وقت التوسيع النحوي لنظام ماكرو واحد هو وقت التشغيل العادي لكتلة أخرى من التعليمات البرمجية، [ 27 ] وأظهرت كيفية تطبيق التوسيع والتحليل المتداخلين في لغة غير مُحاطة بأقواس. [ 28 ]
تُطبّق العديد من اللغات الأخرى غير لغة Scheme إما وحدات ماكرو صحية أو أنظمة صحية جزئياً. ومن الأمثلة على ذلك لغات Scala و Rust و Elixir و Julia و Dylan و Nim و Nemerle .
التطبيقات
- أمر التقييم
- تُستخدم أنظمة الماكرو في مجالاتٍ متعددة. فإمكانية اختيار ترتيب التقييم (انظر التقييم الكسول والدوال غير الصارمة ) تُتيح إنشاء بنيات نحوية جديدة (مثل هياكل التحكم ) لا يمكن تمييزها عن تلك المُدمجة في اللغة. على سبيل المثال، في لهجة لغة ليسب التي تحتوي على خاصية معينة
condولكنها تفتقر إلى خاصية أخرىif، يُمكن تعريف الأخيرة بدلالة الأولى باستخدام الماكرو. فعلى سبيل المثال، تحتوي لغة سكيم على كلٍ من الاستمراريات والماكرو النظيف، مما يُتيح للمبرمج تصميم تجريدات تحكم خاصة به، مثل بنيات التكرار والخروج المبكر، دون الحاجة إلى تضمينها في اللغة. - لغات فرعية للبيانات ولغات خاصة بالمجال
- بعد ذلك، تُمكّن وحدات الماكرو من تعريف لغات البيانات التي يتم تجميعها فورًا إلى كود، مما يعني أنه يمكن تنفيذ بنيات مثل آلات الحالة بطريقة طبيعية وفعالة. [ 29 ]
- بنيات الربط
- يمكن أيضًا استخدام وحدات الماكرو لإدخال بنيات ربط جديدة. المثال الأكثر شهرة هو تحويلها
letإلى تطبيق دالة على مجموعة من الوسائط.
يفترض فيليسين [ 30 ] أن هذه الفئات الثلاث تشكل الاستخدامات المشروعة الأساسية للماكرو في مثل هذا النظام. وقد اقترح آخرون استخدامات بديلة للماكرو، مثل الماكرو الإشاري في أنظمة الماكرو غير الصحية أو التي تسمح بتحويل غير صحي انتقائي.
لقد شكّل التفاعل بين وحدات الماكرو وخصائص اللغة الأخرى مجالًا بحثيًا خصبًا. فعلى سبيل المثال، تُعدّ المكونات والوحدات النمطية مفيدةً للبرمجة واسعة النطاق، ولكن يجب تحديد كيفية تفاعل وحدات الماكرو مع هذه البنى الأخرى لاستخدامها معًا. وقد اقتُرحت أنظمة الوحدات النمطية والمكونات القادرة على التفاعل مع وحدات الماكرو للغة Scheme وغيرها من اللغات التي تدعم وحدات الماكرو. فعلى سبيل المثال، توسّع لغة Racket مفهوم نظام الماكرو ليشمل بنيةً نحويةً متكاملة، حيث يمكن كتابة وحدات الماكرو بلغات تدعمها، مع مراعاة معايير النظافة لضمان تمايز الطبقات النحوية، والسماح للوحدات النمطية بتصدير وحدات الماكرو إلى وحدات نمطية أخرى.
وحدات ماكرو للبرامج المستقلة عن الجهاز
تُستخدم وحدات الماكرو عادةً لربط سلسلة نصية قصيرة (استدعاء ماكرو) بتسلسل أطول من التعليمات. وهناك استخدام آخر، أقل شيوعًا، لوحدات الماكرو يتمثل في عكس ذلك: ربط تسلسل من التعليمات بسلسلة ماكرو. هذا هو النهج الذي اتبعه نظام برمجة الأجهزة المحمولة STAGE2 ، والذي استخدم مُجمِّع ماكرو بدائي (يُسمى SIMCMP) لربط مجموعة التعليمات الخاصة بجهاز كمبيوتر معين بوحدات ماكرو مستقلة عن الجهاز . يمكن بعد ذلك تشغيل التطبيقات (وخاصة المُجمِّعات) المكتوبة بهذه الوحدات المستقلة عن الجهاز دون تغيير على أي جهاز كمبيوتر مُجهز بمُجمِّع الماكرو البدائي. أول تطبيق يتم تشغيله في مثل هذا السياق هو مُجمِّع ماكرو أكثر تطورًا وقوة، مكتوب بلغة الماكرو المستقلة عن الجهاز. يُطبَّق مُجمِّع الماكرو هذا على نفسه، بطريقة تمهيدية ، لإنتاج نسخة مُجمَّعة وأكثر كفاءة منه. ميزة هذا النهج هي إمكانية نقل التطبيقات المعقدة من جهاز كمبيوتر إلى جهاز كمبيوتر مختلف تمامًا بجهد قليل جدًا (لكل بنية جهاز مستهدف، يكفي كتابة مُجمِّع الماكرو البدائي فقط). [ 31 ] [ 32 ] لقد جعل ظهور لغات البرمجة الحديثة، ولا سيما لغة C ، التي تتوفر لها مترجمات على جميع أجهزة الكمبيوتر تقريبًا، هذا النهج غير ضروري. ومع ذلك، كانت هذه إحدى أولى حالات (إن لم تكن الأولى) استخدام تقنية التمهيد الذاتي للمترجم .
لغة التجميع
بينما يمكن للمبرمج تعريف تعليمات الماكرو لأي مجموعة من تعليمات برنامج التجميع الأصلي، فإن وحدات الماكرو عادةً ما تكون مرتبطة بمكتبات الماكرو المرفقة مع نظام التشغيل، مما يسمح بالوصول إلى وظائف نظام التشغيل مثل
- الوصول إلى الأجهزة الطرفية عن طريق طرق الوصول (بما في ذلك وحدات الماكرو مثل OPEN و CLOSE و READ و WRITE)
- وظائف نظام التشغيل مثل ATTACH وWAIT وPOST لإنشاء المهام الفرعية ومزامنتها. [ 33 ] عادةً ما تتوسع هذه الماكروات إلى رمز قابل للتنفيذ، على سبيل المثال، بالنسبة لتعليمات الماكرو EXIT،
- قائمة بتعريف التعليمات الثابتة ، على سبيل المثال، لوحدة DCB الكلية - DTF (تعريف الملف) لنظام التشغيل DOS [ 34 ] - أو مجموعة من التعليمات البرمجية والثوابت، مع تفاصيل التوسيع التي تعتمد على معلمات تعليمات الماكرو (مثل مرجع إلى ملف ومنطقة بيانات لتعليمات القراءة).
- غالباً ما ينتهي الكود القابل للتنفيذ إما بتعليمات سجل التفرع والربط لاستدعاء روتين، أو بتعليمات استدعاء المشرف لاستدعاء وظيفة نظام التشغيل مباشرة.
- إنشاء سلسلة مهام المرحلة الثانية لإنشاء النظام في نظام التشغيل OS/360 على سبيل المثال . على عكس وحدات الماكرو النموذجية، لا تقوم وحدات الماكرو sysgen المرحلة الأولى بإنشاء بيانات أو تعليمات برمجية لتحميلها في وحدة التخزين، بل تستخدم عبارة PUNCH لإخراج JCL والبيانات المرتبطة بها.
في أنظمة التشغيل القديمة مثل تلك المستخدمة في أجهزة الكمبيوتر المركزية من IBM، كانت وظائف نظام التشغيل الكاملة متاحة فقط لبرامج لغة التجميع، وليس لبرامج اللغات عالية المستوى (إلا إذا تم استخدام إجراءات فرعية للغة التجميع، بالطبع)، حيث لم تكن تعليمات الماكرو القياسية دائمًا لها نظائر في الإجراءات المتاحة للغات عالية المستوى.
تاريخ
في منتصف خمسينيات القرن العشرين، عندما كانت برمجة لغة التجميع هي الطريقة الرئيسية لبرمجة الحاسوب ، طُوّرت ميزات تعليمات الماكرو لتقليل حجم الشيفرة المصدرية (عن طريق توليد عدة عبارات تجميعية من كل تعليمة ماكروية) ولفرض اصطلاحات البرمجة (مثل تحديد أوامر الإدخال/الإخراج بطرق قياسية). [ 35 ] تُعالَج تعليمة الماكرو المُضمّنة في الشيفرة المصدرية المكتوبة بلغة التجميع بواسطة مُجمِّع الماكرو، وهو مُعالِج مُسبق للمُجمِّع، لاستبدال الماكرو بتعليمات تجميعية واحدة أو أكثر. ثم تُترجم الشيفرة الناتجة، وهي شيفرة تجميعية خالصة، إلى شيفرة الآلة بواسطة المُجمِّع. [ 36 ]
كان اثنان من أوائل مواقع البرمجة التي طورت لغات الماكرو لجهاز الكمبيوتر IBM 705 في شركة داو كيميكال في ديلاوير ومكتب لوجستيات الصواريخ الباليستية التابع لقيادة المواد الجوية في كاليفورنيا.
يعتبر البعض تعليمات الماكرو بمثابة خطوة وسيطة بين برمجة لغة التجميع ولغات البرمجة عالية المستوى التي تلتها، مثل FORTRAN و COBOL .
بحلول أواخر الخمسينيات، ظهرت برامج تجميع الماكرو ، التي كانت بمثابة مزيج من لغة الماكرو وبرنامج التجميع في حزمة واحدة. [ 36 ] ومن الأمثلة المبكرة على ذلك برنامج تجميع فورتران (FAP) [ 37 ] وبرنامج تجميع الماكرو (IBMAP) [ 38 ] على أجهزة IBM 709 و 7094 و 7040 و7044، وبرنامج Autocoder [ 39 ] على أجهزة 7070 و 7072 و7074 .
في عام 1959، أدخل دوغلاس إي. إيستوود ودوغلاس ماكلروي من مختبرات بيل وحدات الماكرو الشرطية والتكرارية إلى مُجمِّع SAP الشهير ، [ 40 ] مُنشئين بذلك ما يُعرف باسم Macro SAP. [ 41 ] وكانت ورقة ماكلروي البحثية لعام 1960 رائدة في مجال توسيع أي لغة برمجة (بما في ذلك لغات البرمجة عالية المستوى ) من خلال معالجات الماكرو . [ 42 ] [ 40 ]
سمحت مُجمِّعات الماكرو لمبرمجي لغة التجميع بتنفيذ لغة ماكرو خاصة بهم، ووفرت إمكانية محدودة لنقل التعليمات البرمجية بين جهازين يعملان بنفس المعالج ولكن بنظامي تشغيل مختلفين، مثل الإصدارات الأولى من MS-DOS و CP/M-86 . كان يلزم كتابة مكتبة الماكرو لكل جهاز مستهدف، وليس برنامج لغة التجميع ككل. تجدر الإشارة إلى أن مُجمِّعات الماكرو الأكثر تطورًا سمحت باستخدام بنيات التجميع الشرطية في تعليمات الماكرو، مما يُتيح توليد تعليمات برمجية مختلفة على أجهزة أو أنظمة تشغيل مختلفة، وبالتالي تقليل الحاجة إلى مكتبات متعددة.
في ثمانينيات القرن الماضي وبداية التسعينيات، كانت أجهزة الكمبيوتر المكتبية تعمل بترددات منخفضة للغاية (بضع ميغاهرتز)، وكانت برامج لغة التجميع تُستخدم على نطاق واسع لتسريع البرامج المكتوبة بلغات مثل C وFortran وPascal وغيرها. في ذلك الوقت، كانت هذه اللغات تستخدم اصطلاحات استدعاء مختلفة. وكان بالإمكان استخدام وحدات الماكرو لربط البرامج المكتوبة بلغة التجميع بواجهة التطبيقات المكتوبة بأي لغة تقريبًا. وكما ذكرنا، ظلّ كود لغة التجميع الأساسي كما هو، ولم يكن يلزم سوى كتابة مكتبات الماكرو لكل لغة مستهدفة.
في أنظمة التشغيل الحديثة مثل يونكس ومشتقاتها، يتم الوصول إلى نظام التشغيل عبر إجراءات فرعية، تُوفّرها عادةً مكتبات ديناميكية. أما لغات البرمجة عالية المستوى مثل لغة سي، فتُتيح الوصول الشامل إلى وظائف نظام التشغيل، مما يُغني عن الحاجة إلى برامج لغة التجميع لهذه الوظائف.
علاوة على ذلك، فإن المكتبات القياسية للعديد من لغات البرمجة الحديثة، مثل Go ، تثني بنشاط عن استخدام استدعاءات النظام لصالح المكتبات المستقلة عن المنصة، إن لم يكن ذلك ضرورياً، لتحسين قابلية النقل والأمان. [ 43 ]
انظر أيضاً
- ماكرو الإحالة
- لغة التجميع § وحدات الماكرو – خلفية وحدات الماكرو
- عامل مركب – بنية أساسية في لغات البرمجة. صفحات تعرض أوصافًا مختصرة لأهداف إعادة التوجيه.
- البرمجة القابلة للتوسيع – أسلوب من أساليب برمجة الحاسوب
- عملية مدمجة – بنية أساسية في لغة البرمجة: صفحات تعرض أوصافًا مختصرة لأهداف إعادة التوجيه
- وحدات الماكرو الصحية – وحدات الماكرو التي يضمن توسيعها عدم التسبب في التقاط المعرفات
- الماكرو والأمان – قاعدة استبدال مجموعة مدخلات بمجموعة مخرجات، صفحات تعرض أوصافًا مختصرة لأهداف إعادة التوجيه
- البرمجة بالمحاكاة - أسلوب لتعليم الحاسوب أو الروبوت سلوكيات جديدة
- استيفاء السلاسل النصية – استبدال العناصر النائبة في سلسلة نصية بالقيم
مراجع
- ↑ قاموس أكسفورد الإنجليزي ، sv macro ، macro-instruction ، و macro-
- ↑ غرينوالد، إيروين د.؛ كين، مورين (أبريل 1959). "نظام Share 709: البرمجة والتعديل" . مجلة ACM . 6 (2). نيويورك، نيويورك، الولايات المتحدة الأمريكية: ACM: 128-133 . doi : 10.1145/320964.320967 . S2CID 27424222.
من أهم استخدامات وحدات الماكرو البرمجية توفير الوقت وتجنب الأخطاء الكتابية عند كتابة تسلسل التعليمات التي تتكرر غالبًا أثناء تنفيذ البرنامج.
- ↑ ستراشي، كريستوفر (أكتوبر 1965). "مولد ماكرو للأغراض العامة" . مجلة الكمبيوتر . 8 (3): 225-241 . doi : 10.1093/comjnl/8.3.225 .
- ↑ "وحدات الماكرو للوحة المفاتيح والماوس: ما هي وكيفية استخدامها" . Redragonshop . تم الاطلاع عليه بتاريخ 19-07-2026 .
- ↑ "Runescape: The Massive Online Adventure Game by Jagex Ltd" . تم الاطلاع عليه بتاريخ 3 أبريل 2008 .
- ↑ "أتمتة المهام باستخدام مسجل الماكرو | دعم مايكروسوفت" . support.microsoft.com . تم الاطلاع عليه بتاريخ 19 يوليو 2026 .
- ↑ "الانتشار: أنظمة متعددة الفاعلين من الناحية المعرفية" . ubiquity.acm.org . تم الاطلاع عليه بتاريخ 19-07-2026 .
- ↑ "scripts: vim online" . www.vim.org .
- ↑ "محرر هيسلينج" . سورس فورج . 2023-01-02 . تم الاطلاع عليه بتاريخ 2026-07-19 .
- ↑ فاين، جوناثان. "تكس للأبد!" (ملف PDF) . مجموعة مستخدمي تكس . ص 141. تاريخ الاطلاع: 6 ديسمبر 2024.
يحتوي تكس على لغة برمجة ماكرو، مما يسمح بإضافة ميزات جديدة.
- ↑ "وحدات ماكرو برولوج" . www.metalevel.at . تم الاطلاع عليه بتاريخ 2021-04-05 .
- ↑ "Erlang -- Preprocessor" . erlang.org . تم الاطلاع عليه بتاريخ 24-05-2021 .
- ↑ "نظام ديلان الكلي - أوبن ديلان" . opendylan.org . تم الاطلاع عليه بتاريخ 2021-04-05 .
- ↑ "Def Macros" . وثائق سكالا . تم الاطلاع عليه بتاريخ 2021-04-05 .
- ↑ "نبذة عن - الموقع الرسمي للغة البرمجة نيميرل" . nemerle.org . تم الاطلاع عليه بتاريخ 2021-04-05 .
- ↑ "الماكرو - لغة برمجة رست" . doc.rust-lang.org . تم الاطلاع عليه بتاريخ 2021-04-05 .
- ↑ "الماكرو" . elixir-lang.github.com . تم الاطلاع عليه بتاريخ 2021-04-05 .
- ↑ "macros" . nim-lang.org . تم الاطلاع عليه بتاريخ 2021-04-05 .
- ↑ "الماكرو" . هاكس - مجموعة أدوات متعددة المنصات .
- ↑ "البرمجة الوصفية · لغة جوليا" . docs.julialang.org . تم الاطلاع عليه بتاريخ 2021-04-05 .
- ↑ "Sweet.js - وحدات ماكرو صحية لجافا سكريبت" . www.sweetjs.org .
- ↑ "الصفحة الرئيسية لـ LeMP · لغة C# المحسّنة" . ecsharp.net .
- ↑ مارشال، جو. "بريد إلكتروني بدون عنوان" . تم الاسترجاع في 3 مايو 2012 .
- ↑ هارت، تيموثي ب. (أكتوبر 1963). "تعريفات الماكرو للغة ليسب". مذكرات الذكاء الاصطناعي . hdl : 1721.1/6111 . AIM-057.
- ↑ كولبيكر، يوجين؛ فريدمان، دانيال؛ فيليسين، ماتياس؛ دوبا، بروس (1986). "التوسع الكلي الصحي". LFP '86: وقائع مؤتمر ACM لعام 1986 حول لغة LISP والبرمجة الوظيفية . الصفحات 151-161 . doi : 10.1145/319838.319859 . ISBN 0897912004.
- ↑كلينجر، ريس. "وحدات الماكرو التي تعمل"
- ↑ فلات، ماثيو. "وحدات الماكرو القابلة للتركيب والترجمة: متى تريدها؟" (ملف PDF) .
- ↑ رافكيند، جون؛ فلات، ماثيو. "هونو: امتداد نحوي للتدوين الجبري من خلال الإنفاذ" (PDF) .
- ^ “الأتمتة عبر وحدات الماكرو” . cs.brown.edu .
- ↑ماتياس فيليسين، منشور على القائمة البريدية LL1
- ↑ أورغاس، ريتشارد جيه؛ وايت، ويليام إم. (سبتمبر 1969). "أساس لنظام برمجة متنقل" . اتصالات رابطة آلات الحوسبة . 12 (9). نيويورك، نيويورك، الولايات المتحدة الأمريكية: رابطة آلات الحوسبة: 507-510 . doi : 10.1145/363219.363226 . S2CID 8164996 .
- ↑ وايت، ويليام م. (يوليو 1970). "نظام البرمجة المتنقلة: المرحلة الثانية". اتصالات رابطة آلات الحوسبة . 13 (7). نيويورك، نيويورك، الولايات المتحدة الأمريكية: رابطة آلات الحوسبة: 415-421 . doi : 10.1145/362686.362691 . S2CID 11733598 .
- ↑ "جامعة شمال فلوريدا" (ملف PDF) . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 29 أغسطس 2017. تم الاطلاع عليه بتاريخ 15 أغسطس 2018 .
- ↑ "DTF (DOS/VSE)" . IBM .
- ↑ "مركز معارف IBM" . مركز معارف IBM . 16 أغسطس 2013.
- 1 2 "تعليمات الماكرو للغة التجميع" . سيسكو .
- ↑ برنامج تجميع فورتران (FAP) لجهاز IBM 709/7090 (ملف PDF) . نشرة نظام معالجة البيانات 709/7090. شركة IBM . 1961. J28-6098-1.
- ↑ أنظمة برمجة IBM 7090/7094: - لغة برمجة التجميع الكلي (MAP) (ملف PDF) . مكتبة مراجع الأنظمة. 1964. C28-6311-4 . تم الاطلاع عليه في 12 يناير 2025 .
- ↑ دليل مرجعي - أنظمة برمجة سلسلة IBM 7070 - برنامج الترميز التلقائي (PDF) . مكتبة مراجع أنظمة IBM ( الطبعة الأولى). شركة IBM . 1961. C28-6121-0.
- 1 2 هولبروك، برنارد د.؛ براون، دبليو. ستانلي. "التقرير الفني رقم 99 في علوم الحاسوب - تاريخ أبحاث الحوسبة في مختبرات بيل (1937-1975)" . مختبرات بيل . تم الاطلاع عليه في 2 فبراير 2020 .
{{cite web}}: CS1 maint: deprecated archiveal service ( link ) - ↑ "ماكرو ساب - تعديل مُترجم الماكرو لبرنامج ساب" . HOPL: الموسوعة التاريخية الإلكترونية للغات البرمجة . مؤرشف من الأصل في 13 أغسطس 2008.
- ↑ لايزيل، ب. (1985). "تاريخ معالجات الماكرو في قابلية توسيع لغات البرمجة" . مجلة الكمبيوتر . 28 (1): 29-33 . doi : 10.1093/comjnl/28.1.29 .
- ↑ "حزمة استدعاء النظام - استدعاء النظام - حزم Go" . pkg.go.dev . تم الاسترجاع في 2024-06-06 .
روابط خارجية
- كيفية كتابة تعليمات الماكرو
- معهد روتشستر للتكنولوجيا، عرض تقديمي للأساتذة (باوربوينت) مؤرشف بتاريخ 15 يونيو 2022 على موقع Wayback Machine
- بنى البرمجة
- شفرة المصدر
- برامج التشغيل الآلي
