12

سؤال - هل أستطيع استبدال أجزاء من الكود أثناء الترجمة ؟

سؤالي يخص لغة #C ولكن لكون المبدء عام فقد يفيد أي جواب في أي لغة أخرى

نحن نكتب الكود في المحرر ومن ثم نقوم بالترجمة لينتج لغة نهائية أو لغة وسيطة

مثلا لغات الدوت النت تترجم كمرحلة أولى إلى IL الذي يكون على CLR و من ثم يتم ترجمته إلى برنامج للتنفيذ

بحسب ما وجدت من مشاريع مثل Contract و PostSharp فإني ألاحظ أن هناك عملية تعديل على الكود بعد الترجمة

وسؤالي هل بإمكاني أن أقوم بنفس الأمر أي هل هناك آلية تمكنني من إعادة تصريف أو استبدال أجزاء من الكود أثناء الترجمة

سؤالي ناتج أني أستخدم في كثير من الأحيان مناهج مضافة بدلا من الكود المباشر وذلك من أجل المقروئية

مثلا كثيرا ما استخدم

if(obj.Exist()) 

أو

if(obj.Null()) 

بدلا من

if(obj != null)

أو

if(obj == null)

وحيث أن الأول يعتبر استدعاء لدالة بينما الآخر يترجم مباشرة لعملية فحص

طبعا ليس الأمر محصور بهذا المثال فقط ولكن ضربته للتوضيح

فإنني أريد أن لا أفقد المقروئية

وبنفس الوقت أريد التخلص من الاستدعاءات الكثيرة الزائدة

ولهذا خطر ببالي أنه أثناء الكتابة استخدم الاستدعاءات للمناهج المضافة

وأثناء الترجمة أقوم باستبدالها بالكود المختصر

فهل لأحد منكم معرفة أو تجربة بهذا الخصوص ؟

وشكرا لكم


ربما تبحث عن شي مماثل للـ directives ? خصوصاً #if ?

أشكرك أخي

لا ليس هذا ما أريد لأنه هذا يفعل قسم ويحجب قسم من الكود بناء على خصائص معينة

ما قصدته أنه يوجد ثلاث أطوار أو أزمنة

  • زمن التصميم أو التحرير Design-Time

  • زمن الترجمة Compile-Time

  • زمن التنفيذ Run-Time

في زمن التنفيذ يكون الكود المصدري الذي نكتبه وكما نراه

عند الترجمة يتم تحويل الكود السابق إلى كود IL ويسمى أحيانا MSIL و هو كود مفهوم بالنسبة لـ CLR المنصة الافتراضية المشتركة التي تكون وسيطة بين مختلف لغات دوت نت و لغة الآلة

عند التنفيذ يتم تحويل كود IL إلى لغة الآلة ويتم تشغيل البرنامج

طلبي هو أنه عندما أقوم بكتابة كود في زمن التصميم

وعندما أقوم بعملية الترجمة وقبل أن يحوله إلى IL أن اعترضه بإجراء يقوم بفحص الكود وأجري عليه تعديلات من استبدال وحشر أو حذف ثم إكمال عملية الترجمة

أنا أعلم أن هذه العملية ممكنة وقد استخدمت في كل من مشاريع Contract و البايمج التي تدعم AOP و Code Injection مثل PostSharp و غيرها

حيث تقوم باعتراض عملية الترجمة وتحشر أكوادها أو تستبدلها

وهنا سؤالي هل هذه العملية لها أدوات جاهزة أم علي أن أبحث كيف فعلها أولئك ؟