السلام عليكم و رحمة الله,
منذ مدة طويلة أسمع عن مصطلح يسمى الـ Meta Programming!
حقيقة لم أكن أفهم ماذا يعني أو على ماذا يدل! حتى وفقني الله لقراءة بعض المقالات الجيدة حول الموضوع و استطعت استيعاب الهدف من وراءه!
الـ Meta Programming هي عملية كتابة كود يقوم بإنشاء كود آخر قبل ترجمة البرنامج باللغة التي تستخدمها! بكل بساطة هي عبارة عن Code Generators.
الكثيرون يعرفون الـ Wizards التي تأتي مع معظم بيئات التطوير الكبيرة, و لكنهم لايعرفون أن هذه الـ Wizards هي بوابة عالم المحترفين, بل الخبراء بمعنى أصح!
لايوجد مبرمج ++C/C على وجه الأرض لايعرف الـ Preprocessors التي تدعمها لغة ++C/C, و هي في الحقيقة من أكثر الأمور التي تشوش على المبرمجين!
فقليل هم الذين يعرفونها حق المعرفة, و ذلك ليس عيباً! فهي لغة أخرى ليس لها دخل أصلاً بلغة ++C أو C على الإطلاق.
عندما تقوم بكتابة كود ما بلغتك المفضلة C أو ++C, فلن يقوم المترجم الذي تستخدمه بترجمة الكود الذي قمت بكتابته مباشرة!
سيمر الكود قبل ذلك على مرحلة مهمة جداً و هي عملية الـ Preprocessing,
لاحظ عندما تقوم بكتابة أي كود بلغة C أو ++C أنك ستقوم بكتابة أسطر من الكود مسبوقة بالعلامة #, و كمثال على ذلك عملية تضمين ملف آخر على الشكل التالي :
#include <iostream>
هل تعتقد أن السطر السابق سيفهمه مترجم لغة ++C/C, في الحقيقة أن المترجم لا يعرف عنه أي شيء!
السطر السابق هو من اختصاص الـPreprocessor, و الذي بدوره لا يعرف أي شيء عن لغة ++C/C :D
جميع الأسطر المسبوقة بالعلامة #, يتم معالجتها, إما يتم استبدالها بكود أو تطبيق شيء على الكود الحالي و هكذا! و لكن تذكر أن الـ Preprocessor لا يعرف أي شيء عن لغة ++C/C أو قواعدها على الإطلاق,
لهذا ستجد أنه من الصعوبة بمكان اكتشاف أخطاء الـ Preprocessor Directives في كثير من الأحيان!
من هنا نرى أن القوة الكامنة في لغة ++C/C ليست في اللغة لوحدها و إنما في مجموعة الأدوات المتوفرة لمبرمجين هاتين اللغتين, و التي يسمع عنها المبرمجون الآخرون و لكنهم لم و لن يصلوا لتفكير مبرمجي ++C/C مهما طال الزمان :P (على سبيل المزاح لا أكثر :) )
تعتبر الـ preprocessor من أبسط لغات الـ Meta Programming في العالم
على العموم إن كنت تعتقد أن هذا أقصى ما توفره لغة C, فتوقف قليلاً و انظر حولك, مالذي أثار عطش المبرمجين الكبار حول العالم! إنها القوالب أو الـ Templates في ++C,
لن أتكلم عن الـ Templates في ++C, لأني لن أوفيها حقها فمعرفتي البرمجية لم تلامس إلا أسطح ذلك العلم,
و لكن دعني أقول لك أنه عن طريق الـ Templates يمكنك صناعة لغة برمجة جديدة, صدق أو لا تصدق ؟!
فالقوالب هي لغة مختلفة تماماً عن لغة ++C, على الرغم من أن القوالب ينتج عنها كود ++C يقوم المترجم بترجمته بشكل طبيعي!
إذا وصلت لنهاية هذا الموضوع فأرجو منك أن تعطينا من وقتك قليلاً و تخبرنا ماهو الشيء الذي لم تفهمه في عمل الـ preprocessors في لغة الـ C أو ماهو الشيء الذي أثار انتباهك في القوالب في لغة ++C,
شارك بخبرتك حول الموضوع فربما تفيد الآخرين بشيء لم يعرفوه من قبل!
و السلام عليكم و رحمة الله و بركاته.



