سؤالي يخص لغة #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 و غيرها
حيث تقوم باعتراض عملية الترجمة وتحشر أكوادها أو تستبدلها
وهنا سؤالي هل هذه العملية لها أدوات جاهزة أم علي أن أبحث كيف فعلها أولئك ؟
التعليقات