لغة البرمجة m4

m4 هو معالج ماكرو للأغراض العامة مضمن في معظم أنظمة التشغيل الشبيهة بنظام Unix ، وهو أحد مكونات معيار POSIX .

صُممت هذه اللغة بواسطة برايان كيرنيغان ودينيس ريتشي للإصدارات الأصلية من نظام يونكس . وهي امتداد لمعالج ماكرو سابق، يُدعى m3، كتبه ريتشي لحاسوب صغير غير معروف من طراز AP-3. [ 1 ]

يعمل معالج الماكرو المسبق كأداة لاستبدال النصوص. ويُستخدم لإعادة استخدام قوالب النصوص، عادةً في تطبيقات برمجة الحاسوب ، ولكن أيضًا في تطبيقات تحرير النصوص ومعالجتها. ويحتاج معظم المستخدمين إلى m4 كجزء من متطلبات GNU autoconf و GNU Bison .

تاريخ

انتشرت معالجات الماكرو عندما شاع استخدام لغة التجميع بين المبرمجين . في تلك الأيام الأولى للبرمجة، لاحظ المبرمجون أن معظم برامجهم تتكون من نصوص متكررة، فابتكروا وسائل بسيطة لإعادة استخدام هذه النصوص. وسرعان ما اكتشف المبرمجون مزايا ليس فقط إعادة استخدام كتل كاملة من النصوص، بل أيضًا استبدال قيم مختلفة بمعاملات متشابهة. وقد حدد هذا نطاق استخدام معالجات الماكرو في ذلك الوقت. [ 2 ]

في الستينيات، كان معالج ماكرو متعدد الأغراض مبكرًا، وهو M6، قيد الاستخدام في مختبرات AT&T Bell ، والذي طوره دوغلاس ماكلروي وروبرت موريس وأندرو هول. [ 3 ]

قام كيرنيغان وريتشي بتطوير برنامج m4 في عام 1977، استنادًا إلى أفكار كريستوفر ستراشي . وتضمنت السمات المميزة لهذا النمط من المعالجة المسبقة للبيانات الكلية ما يلي:

  • بناء جملة حر (ليس قائمًا على الأسطر مثل معالج الماكرو النموذجي المصمم لمعالجة لغة التجميع)
  • درجة عالية من إعادة التوسيع (يتم توسيع وسائط الماكرو مرتين: مرة أثناء المسح ومرة ​​أخرى في وقت التفسير)

استخدمت لغة Rational Fortran محرك m4 كمحرك ماكرو منذ البداية، وتأتي معظم إصدارات Unix مزودة به.

اعتبارًا من عام 2024لا تزال العديد من التطبيقات تستخدم m4 كجزء من برنامج autoconf التابع لمشروع GNU . كما يظهر أيضًا في عملية تهيئة برنامج sendmail (وهو برنامج شائع لنقل البريد الإلكتروني ) وفي إنشاء ملفات تعريفية في مجموعة أدوات gEDA . وتعتمد سياسة SELinux المرجعية بشكل كبير على معالج الماكرو m4.

يُستخدم m4 في العديد من تطبيقات توليد التعليمات البرمجية ، ولكن (كما هو الحال مع أي معالج ماكرو) قد يكون من الصعب تصحيح الأخطاء. [ 4 ]

سمات

يوفر مركز m4 هذه المرافق:

  • بناء جملة حر الشكل ، بدلاً من بناء جملة قائم على الأسطر
  • درجة عالية من التوسع الكلي (يتم توسيع الحجج أثناء المسح الضوئي ومرة ​​أخرى أثناء التفسير)
  • استبدال النص
  • استبدال المعلمات
  • تضمين الملف
  • معالجة السلاسل
  • التقييم المشروط
  • التعبيرات الحسابية
  • واجهة النظام
  • تشخيص المبرمج
  • مستقل عن لغة البرمجة
  • لغة بشرية مستقلة
  • يوفر إمكانيات لغات البرمجة

على عكس معظم معالجات الماكرو السابقة، لا يستهدف m4 أي لغة برمجة حاسوبية أو بشرية محددة؛ إلا أن تطويره تاريخيًا بدأ لدعم لهجة Ratfor من لغة Fortran . وعلى عكس بعض معالجات الماكرو الأخرى، فإن m4 كاملة تورينج، بالإضافة إلى كونها لغة برمجة عملية.

تُستبدل المعرّفات غير المُقتبسة التي تُطابق وحدات الماكرو المُعرّفة بتعريفاتها. ويؤدي وضع المعرّفات بين علامتي اقتباس إلى منع التوسيع حتى وقت لاحق، كما هو الحال عند توسيع سلسلة نصية مُقتبسة كجزء من استبدال الماكرو. وعلى عكس معظم اللغات، تُقتبس السلاسل النصية في m4 باستخدام علامة الاقتباس المائلة (`) كفاصل بداية ، وعلامة الفاصلة العليا (') كفاصل نهاية. يسمح وجود فواصل بداية ونهاية منفصلة باستخدام تداخل علامات الاقتباس بشكل عشوائي في السلاسل النصية، مما يتيح درجة عالية من التحكم في كيفية ووقت حدوث توسيع الماكرو في أجزاء مختلفة من السلسلة النصية.

مثال

يُقدّم المقطع التالي مثالاً بسيطاً يُمكن أن يُشكّل جزءاً من مكتبة لتوليد أكواد HTML . وهو يُعرّف ماكرو مُعلّقاً لترقيم الأقسام تلقائياً:

تحويل(-1) يحتوي m4 على عدة قوائم إخراج يمكن التلاعب بها باستخدام ماكرو "تحويل". تتراوح قوائم الانتظار الصالحة من 0 إلى 10، شاملةً، مع قائمة الانتظار الافتراضية هي 0. وكإضافة، يدعم GNU m4 المزيد التحويلات، التي لا يحدها سوى حجم نوع البيانات الصحيحة. يؤدي استدعاء الماكرو "divert" مع قائمة انتظار غير صالحة إلى ظهور النص يتم تجاهل المخرجات حتى يتم استدعاء الدالة مرة أخرى. لاحظ أنه حتى أثناء معالجة المخرجات تم تجاهلها، وعلامات الاقتباس حول كلمة "divert" ووحدات الماكرو الأخرى مطلوبة لـ منع التمدد. # لا يتم توسيع وحدات الماكرو داخل التعليقات، مما يعني أن الكلمات الرئيسية مثل # يمكن استخدام وظيفة التحويل وغيرها من الوظائف المدمجة دون أي عواقب. ماكرو أداة HTML: define(`H2_COUNT', 0) # يتم إعادة تعريف الماكرو H2_COUNT في كل مرة يتم فيها استخدام الماكرو H2: define(`H2', `define(`H2_COUNT', incr(H2_COUNT)) < h2 > H2_COUNT. $1 </ h2 > ') divert(1)dnl dnl يؤدي الأمر dnl إلى قيام m4 بتجاهل باقي السطر، وبالتالي يمنع الأمر dnl ظهور أسطر فارغة غير مرغوب فيها في المخرجات. dnl القسم الأول (H2) القسم الثاني (H2) H2 (الخلاصة) dnl تحويل(0)dnl dnl < HTML > يتم دفع أحد الطوابير إلى الإخراج باستخدام undiver(1)dnl. </ HTML >

يؤدي معالجة هذا الكود باستخدام m4 إلى إنشاء النص التالي:

< HTML > < h2 > 1. القسم الأول </ h2 > < h2 > 2. القسم الثاني </ h2 > < h2 > 3. الخاتمة </ h2 > </ HTML >

التطبيقات

توفر أنظمة FreeBSD و NetBSD و OpenBSD تطبيقات مستقلة للغة m4. علاوة على ذلك، تتضمن أدوات تطوير مشروع Heirloom نسخة مجانية من لغة m4، مشتقة من OpenSolaris .

تم تضمين M4 في نظام التشغيل Inferno . هذا التطبيق أقرب إلى m4 الأصلي الذي طوره كيرنيغان وريتشي في الإصدار 7 من يونكس منه إلى نظائره الأكثر تطوراً في أنظمة يونكس سيستم 5 وبوسيكس . [ 5 ]

GNU m4 هو تطبيق لـ m4 ضمن مشروع جنو . [ 6 ] [ 7 ] صُمم لتجنب العديد من القيود التعسفية الموجودة في تطبيقات m4 التقليدية، مثل الحد الأقصى لطول السطر، والحد الأقصى لحجم الماكرو، وعدد الماكرو. إزالة هذه القيود التعسفية أحد الأهداف المعلنة لمشروع جنو. [ 8 ]

تستخدم حزمة GNU Autoconf على نطاق واسع ميزات GNU m4.

يتولى غاري ف. فوغان وإريك بليك حاليًا صيانة برنامج GNU m4. [ 6 ] برنامج GNU m4 هو برنامج مجاني ، تم إصداره بموجب شروط رخصة جنو العمومية العامة .

انظر أيضاً

مراجع

  1. برايان دبليو. كيرنيغان ودينيس إم. ريتشي. معالج الماكرو m4. تقرير فني، مختبرات بيل، موراي هيل، نيو جيرسي، الولايات المتحدة الأمريكية، 1977. ملف PDF مؤرشف في 5 أغسطس 2004 على موقع Wayback Machine
  2. تاريخ جنو إم 4
  3. هول، أندرو د. (1972). معالج الماكرو M6. تقرير فني رقم 2 في علوم الحاسوب (ملف PDF) (تقرير). مختبرات بيل.
  4. كينيث ج. تيرنر. استغلال لغة الماكرو m4. تقرير فني CSM-126، قسم علوم الحاسوب والرياضيات، جامعة ستيرلنغ، اسكتلندا، سبتمبر 1994. pdf
  5. دليل أوامر Inferno العامةm4(1)  
  6. 1 2 موقع GNU m4 على الويب "GNU M4" مؤرشف في 25 يوليو 2016، في Wayback Machine ، تم الوصول إليه في 25 يناير 2020.
  7. دليل استخدام GNU m4، متوفر عبر الإنترنت وللتحميل بصيغ HTML وPDF وغيرها. "GNU M4 معالج ماكرو GNU". مؤرشف بتاريخ 17 أغسطس 2023 في أرشيف الإنترنت (Wayback Machine )، تم الاطلاع عليه بتاريخ 25 يناير 2020.
  8. "معايير برمجة جنو: كتابة برامج قوية" مؤرشفة في 16 أبريل 2016، على موقع Wayback Machine . اقتباس: "تجنب وضع قيود تعسفية على طول أو عدد أي بنية بيانات".