.NET CLR هي بيئة تشغيل تعمل على إدارة وتنفيذ التعليمات البرمجية المكتوبة بأي لغة برمجة .NET. CLR هو مكون الجهاز الظاهري لإطار عمل .NET. يقوم مترجم تلك اللغة بتجميع الكود المصدري للتطبيقات التي تم تطويرها باستخدام اللغات المتوافقة مع .NET إلى لغة CLR الوسيطة والتي تسمى MSIL، أي كود اللغة الوسيطة لـ Microsoft. هذا الرمز مستقل عن النظام الأساسي. إنه مشابه لرمز البايت في Java. يتم أيضًا إنشاء البيانات التعريفية أثناء التجميع وكود MSIL وتخزينها في ملف يعرف باسم ملف البيان. تتعلق بيانات التعريف هذه بشكل عام بالأعضاء والأنواع المطلوبة بواسطة CLR لتنفيذ كود MSIL. يقوم مكون برنامج التحويل البرمجي في الوقت المناسب لـ CLR بتحويل كود MSIL إلى كود أصلي للجهاز. هذا الرمز يعتمد على النظام الأساسي. يدير CLR الذاكرة والخيوط والاستثناءات وتنفيذ التعليمات البرمجية وسلامة التعليمات البرمجية والتحقق والتجميع.
مجموعة من السلاسل في البرمجة C
يوضح الشكل التالي تحويل الكود المصدري إلى كود أصلي.
الرقم أعلاه يحول التعليمات البرمجية إلى تعليمات برمجية أصلية، والتي يمكن لوحدة المعالجة المركزية تنفيذها.
المكونات الرئيسية لـ CLR هي:
- نظام النوع المشترك
- أنواع اللغة المشتركة
- جامع القمامة
- فقط في الوقت المناسب مترجم
- البيانات الوصفية والتجمعات
1. نظام النوع المشترك:
توفر CTS إرشادات للإعلان عن أنواع البيانات واستخدامها وإدارتها في وقت التشغيل. ويقدم التواصل بين اللغات. على سبيل المثال، يحتوي VB.NET على نوع بيانات عدد صحيح، ويحتوي C# على نوع بيانات int لإدارة الأعداد الصحيحة. بعد التجميع، يتم استخدام Int32 بواسطة كلا النوعين من البيانات. لذلك، توفر CTS أنواع البيانات باستخدام التعليمات البرمجية المُدارة. يساعد نظام الكتابة الشائع في كتابة تعليمات برمجية مستقلة عن اللغة.
ويوفر فئتين من الأنواع.
2. مواصفات اللغة المشتركة (CLS):
تحتوي مواصفات اللغة العامة (CLS) على مجموعة من القواعد التي يجب اتباعها من قبل كافة اللغات التي يدعمها NET. تسهل القواعد العامة تنفيذ تكامل اللغة وتساعد في الميراث عبر اللغات وتصحيح الأخطاء. كل لغة يدعمها NET Framework لها قواعد بناء الجملة الخاصة بها. لكن CLS يضمن قابلية التشغيل البيني بين التطبيقات التي تم تطويرها باستخدام لغات NET.
3. جمع القمامة:
يعد Garbage Collector أحد مكونات CLR الذي يعمل كمدير تلقائي للذاكرة. فهو يساعد على إدارة الذاكرة عن طريق تخصيص الذاكرة تلقائيًا وفقًا للمتطلبات. يخصص ذاكرة الكومة للكائنات. عندما لا تكون الكائنات قيد الاستخدام، فإنها تستعيد الذاكرة المخصصة لها لاستخدامها في المستقبل. كما أنه يضمن سلامة الكائنات من خلال عدم السماح لكائن ما باستخدام محتوى كائن آخر.
4. مترجم في الوقت المناسب (JIT):
يعد JIT Compiler مكونًا مهمًا في CLR. يقوم بتحويل كود MSIL إلى كود أصلي (أي كود خاص بالجهاز). يتم تجميع برنامج .NET بشكل صريح أو ضمني. يستدعي المطور أو المبرمج مترجمًا معينًا لتجميع البرنامج في الترجمة الصريحة. في الترجمة الضمنية، يتم ترجمة البرنامج مرتين. يتم تجميع التعليمات البرمجية المصدر إلى لغة Microsoft المتوسطة (MSIL) أثناء عملية التحويل البرمجي الأولى. يتم تحويل كود MSIL إلى كود أصلي في عملية التحويل البرمجي الثانية. تسمى هذه العملية تجميع JIT. هناك ثلاثة أنواع من مترجمات JIT - Pre وEcono وNormal. يقوم برنامج Pre JIT Compiler بتجميع كود MSIL بالكامل إلى كود أصلي قبل التنفيذ. يجمع برنامج Econo JIT Compiler فقط تلك الأجزاء من كود MSIL المطلوبة أثناء التنفيذ ويزيل تلك الأجزاء التي لم تعد مطلوبة بعد الآن. يقوم برنامج JIT Compiler العادي أيضًا بتجميع تلك الأجزاء من كود MSIL المطلوبة أثناء التنفيذ فقط ولكنه يضعها في ذاكرة التخزين المؤقت لاستخدامها في المستقبل. لا يتطلب الأمر إعادة تجميع الأجزاء المستخدمة بالفعل حيث تم وضعها في ذاكرة التخزين المؤقت.
5. البيانات الوصفية:
البيانات التعريفية هي معلومات ثنائية حول البرنامج، إما مخزنة في ملف CLR قابل للتنفيذ محمول (PE) مع كود MSIL أو في الذاكرة. أثناء تنفيذ MSIL، يتم أيضًا تحميل البيانات التعريفية في الذاكرة من أجل التفسير الصحيح للفئات وما يتصل بها. المعلومات المستخدمة في الكود لذلك، تساعد البيانات التعريفية في تنفيذ التعليمات البرمجية بطريقة محايدة للغة أو تحقيق قابلية التشغيل البيني للغة.
6. الجمعيات:
التجميع هو وحدة أساسية لتجميع التعليمات البرمجية الفعلية. وهو يتألف من بيان التجميع والبيانات التعريفية ورمز MSIL ومجموعة من الموارد مثل ملفات الصور. وتعتبر أيضًا وحدة نشر أساسية والتحكم في الإصدار وإعادة الاستخدام وأذونات الأمان وما إلى ذلك.
وظائف .NET CLR
فيما يلي وظائف CLR.
- يقوم بتحويل البرنامج إلى كود أصلي.
- يعالج الاستثناءات
- يوفر نوع السلامة
- إدارة الذاكرة
- يوفر الأمن
- تحسين الأداء
- لغة مستقلة
- منصة مستقلة
- جمع القمامة
- يوفر ميزات اللغة مثل الميراث والواجهات والتحميل الزائد للبرامج الموجهة للكائنات.
يُطلق على التعليمات البرمجية التي يتم تشغيلها مع CLR اسم التعليمات البرمجية المُدارة، بينما يُطلق على التعليمات البرمجية الموجودة خارج CLR اسم التعليمات البرمجية غير المُدارة. يوفر CLR أيضًا طبقة إمكانية التشغيل البيني، والتي تسمح لكل من الرموز المُدارة وغير المُدارة بالتشغيل المتبادل.
1. الكود المُدار:
أي لغة مكتوبة في إطار عمل .NET هي تعليمات برمجية مُدارة. تستخدم التعليمات البرمجية المُدارة CLR، الذي يعتني بتطبيقاتك عن طريق إدارة الذاكرة، والتعامل مع الأمان، والسماح بتصحيح الأخطاء عبر اللغات، وما إلى ذلك. تظهر عملية التعليمات البرمجية المُدارة في الشكل:
2. التعليمات البرمجية غير المُدارة:
تُعرف التعليمات البرمجية التي تم تطويرها خارج إطار عمل .NET بالتعليمات البرمجية غير المُدارة. يقال إن التطبيقات التي لا تعمل تحت سيطرة CLR غير مُدارة. يمكن استخدام لغات معينة مثل C++ لكتابة مثل هذه التطبيقات، مثل وظائف الوصول ذات المستوى المنخفض لنظام التشغيل. يُعد توافق الخلفية مع VB وASP وCOM أمثلة على التعليمات البرمجية غير المُدارة. يتم تنفيذ هذا الرمز بمساعدة فئات المجمع. تظهر عملية التعليمات البرمجية غير المُدارة أدناه:
إصدارات .NET CLR
يقوم CLR بتحديث نفسه من وقت لآخر لتوفير أداء أفضل.
نسخة .NET | نسخة CLR |
---|---|
1.0 | 1.0 |
1.1 | 1.1 |
2.0 | 2.0 |
3.0 | 2.0 |
3.5 | 2.0 |
4 | 4 |
4.5 | 4 |
4.6 | 4 |
4.6 | 4 |
هيكل .NET CLR
فيما يلي البنية المكونة لوقت تشغيل اللغة العامة.
دعم مكتبة الفئة الأساسية
إنها مكتبة فئة تدعم الفئات لتطبيق .NET.
دعم الموضوع
يدير التنفيذ المتوازي للتطبيق متعدد الخيوط.
كوم مارشالر
يوفر الاتصال بين كائنات COM والتطبيق.
محرك الأمن
أنها تفرض القيود الأمنية.
محرك التصحيح
يسمح لك بتصحيح أنواع مختلفة من التطبيقات.
نوع المدقق
يقوم بفحص الأنواع المستخدمة في التطبيق والتأكد من مطابقتها للمعايير التي يوفرها CLR.
مدير الكود
يدير التعليمات البرمجية في وقت تشغيل التنفيذ.
جامع القمامة
يقوم بتحرير الذاكرة غير المستخدمة وتخصيصها لتطبيق جديد.
معالج الاستثناء
يعالج الاستثناء في وقت التشغيل لتجنب فشل التطبيق.
ClassLoader
يتم استخدامه لتحميل جميع الفئات في وقت التشغيل.