
.NET (va hozirgi zamonaviy .NET Core) dasturlash platformasi zamonaviy dasturlarni yaratish uchun keng imkoniyatlar yaratuvchi kuchli muhitdir. Bu platformaning markazida, uning “yuragi” hisoblangan CLR (Common Language Runtime) turadi. CLR .NET ilovalarining ishlashini ta’minlaydigan va ularga turli xil muhim xizmatlarni taqdim etadigan ijro etish muhiti (runtime environment) hisoblanadi.
CLR ni C++ kabi an’anaviy kompilyatsiya qilingan tillarning operatsion tizimga bog’liq mahalliy ijro etish muhiti (native runtime) bilan solishtirish mumkin, ammo CLR ancha yuqori darajada va xavfsizroq bo’lib, .NETning eng muhim ustunligi — bir nechta dasturlash tillarining o’zaro mosligi(Language Interoperability)ni ta’minlaydi, ya’ni, C#, VB.NET, F# kabi turli .NET tillarida yozilgan kodni aynan bir muhitda ishga tushirishga imkon beradi.
CLR ning dasturlash siklidagi tuzilishi va vazifalariga quyidagilar kiradi:
ILkodga kompilyatsiya qilish
Dasturchi C#(yoki boshqa .NET tili)da kod yozadi. Bu kod maxsus til kompilyatori tomonidan darhol protsessor tushunadigan mahalliy mashina kodiga (native machine code) emas, balki IL (Intermediate Language — oraliq til) yoki CIL (Common Intermediate Language) deb ataladigan oraliq kodga kompilyatsiya qilinadi.
Masalan, quyudagi rasmda BaseProcessor sinfidagi c# kodning IL kod ko’rinishi keltirilgan:

- Kompilyatsiyadan keyin kod IL kodiga ega bo’lgan .exe yoki .dll faylga aylanadi.
- Bu .exe fayl an’anaviy C++ dan farqli o’laroq, CLR siz ishlay olmaydi. Uning ichidagi IL kod hali “qo’shimcha ishlov” talab qiladi. Bu fayli ishga tushirishda operatsion sistema doim CLR yordamiga muhtoj bo’ladi.
Bajariladigan (.exe) faylni ishga tushirish
Foydalanuvchi .exe faylni ishga tushirganda, operatsion tizim (OS) to’g’ridan-to’g’ri kodni ishga tushirish o’rniga, avvalo CLR ni yuklaydi. CLR keyin IL kodni o’zining ijro etish muhitiga oladi.
JIT kompilyatori (Just-In-Time)
CLR ning asosiy vazifalaridan biri IL kodni haqiqiy mashina kodiga aylantirishdir. Bu jarayon JIT (Just-In-Time — Ayni Vaqtida) kompilyatori tomonidan amalga oshiriladi va u CLR tarkibika kiradi.
Qanday Ishlaydi?
JIT kompilyatori satrma-satr emas, balki metod (funktsiya) bo’yicha ishlaydi. Dastur ishga tushganda, CLR IL kodni yuklaydi, lekin metod chaqirilmaguncha uni kompilyatsiya qilmaydi. Metod birinchi marta chaqirilganda, JIT kompilyatori metodning butun IL kodini CPU tushunadigan mahalliy mashina kodiga aylantiradi va bu kodni xotirada (RAM) saqlaydi. Keyingi safar xuddi shu metod chaqirilganda, CLR kompilyatsiyani takrorlamaydi, balki to’g’ridan-to’g’ri xotiradan (RAM) avvalgi JIT kompilyatsiya qilingan mashina kodini ishlatadi. Bu esa keyingi chaqiruvlarni tezlashtiradi. JIT kompilyatsiya qilingan kod faqat joriy jarayon (process) uchun ajratilgan xotirada turadi va dastur tugagach, u yo’qoladi (diskka yozilmaydi).
CLR ning asosiy vazifasi
CLR nafaqat kodni ishga tushiradi, balki .NET dasturining ishonchli, xavfsiz va samarali ishlashini ta’minlaydigan juda muhim vazifalarni bajaradi, bularga:
1. Xotirani boshqarish (Memory Management)
Bu CLR ning eng muhim vazifalaridan biridir. CLR xotirani ikki asosiy maydonga ajratadi:
- Stack xotira: Kichik va qisqa muddatli ma’lumotlar (primitiv tiplari, metod chaqiruvlari) uchun.
- Heap xotira: Ob’ektlar va uzoq muddatli ma’lumotlar (referance tiplari) uchun.
- Garbage Collector: CLR ning xotira boshqaruvi tizimining avtomatik mexanizmi. Dasturchi xotirani qo’lda bo’shatish haqida qayg’urmaydi (C/C++ dan farqli o’laroq). GC foydalanilmayotgan (erishib bo’lmaydigan) ob’ektlarni aniqlaydi va ularni Heap xotirasidan avtomatik ravishda tozalaydi, bu esa xotira sizib chiqishining (memory leak) oldini oladi.
2. Tip xavfsizligi (Type Safety)
CLR kompilyatsiya va ijro vaqtida ma’lumot turlari to’g’ri ishlatilayotganligini qat’iy tekshiradi. Masalan, integer turidagi o’zgaruvchiga string qiymatini saqlashga urinishning oldini oladi. Bu dasturning barqarorligi va ishonchliligini oshiradi.
3. Xatoliklarni boshqarish (Exception Handling)
Dastur ishlayotgan vaqtda yuzaga keladigan xatolarni standartlashtirilgan va xavfsiz tarzda boshqarish mexanizmini ta’minlaydi. Agar metodda xato yuz bersa, CLR bu xatoni ilova bo’ylab yuqoriga yuboradi, bu esa dasturga to’satdan qulab tushish o’rniga xatoni toza ushlab olish va ishlash imkonini beradi.
4. Xavfsizlik (Security)
CLR kodga ruxsat berish darajasini boshqaradi. Kod xavfsizligi (Code Access Security — CAS) kabi mexanizmlar orqali (hozirgi .NETda kamroq qo’llaniladi, lekin tushuncha mavjud) CLR kodning qanday resurslarga (fayl tizimi, tarmoq) kirish huquqiga ega ekanligini cheklaydi. Bu ayniqsa internetdan yuklab olingan ishonchsiz kodning zararli harakatlar qilishiga to’sqinlik qilishda muhim. CLR shuningdek, Reflection kabi xizmatlarning ham xavfsiz ishlashini ta’minlaydi.
5. Boshqa xizmatlar
- Ko’p oqimlilik (Threading): CLR ilovalarda bir nechta vazifani bir vaqtning o’zida bajarish (paralellik) uchun tishlarni boshqarish xizmatlarini taqdim etadi.
- Boshqa kodlar bilan hamkorlik (Interoperability): CLR boshqarilmaydigan kod (masalan, C++ DLLlari) bilan ishlash mexanizmlarini (COM Interop, P/Invoke, Marshaling) ta’minlaydi.
Xulosa
CLR (Common Language Runtime) .NET platformasining nafaqat ijro etish muhiti, balki butun tizimning hayotiy kuchidir. U C# kodini samarali va xavsiz tarzda bajarilishini ta’minlaydi, xotirani avtomatik boshqaradi, dasturni xavfsiz qiladi va yuzaga keladigan xatoliklarni bir xil tarzda boshqarish imkonini beradi.
CLR ning asosiy vazifasi — IL kodni JIT orqali mashina kodiga kompilyatsiya qilish va uning butun hayoti davomida yuqori boshqaruv xizmatlarini (xotira, xavfsizlik, xatoliklarni aniqlash) taqdim etishdir. Aynan CLR ning mavjudligi tufayli .NET dasturlari cross platformali, yuqori samarador, barqaror va ko’p til bilan ishlay olish xususiyatiga ega.
.NET Framework (va hozirgi zamonaviy .NET Core/5+) dasturlash platformasi zamonaviy dasturlarni yaratish uchun keng imkoniyatlar yaratuvchi kuchli muhitdir. Bu platformaning markazida, uning “yuragi” hisoblangan CLR (Common Language Runtime — Umumiy Til Ishlash Muhiti) turadi. CLR .NET ilovalarining ishlashini ta’minlaydigan va ularga turli xil muhim xizmatlarni taqdim etadigan ijro etish muhiti (runtime environment) dir.
CLR ni C++ kabi an’anaviy kompilyatsiya qilingan tillarning operatsion tizimga bog’liq mahalliy ijro etish muhiti (native runtime) bilan solishtirish mumkin, ammo CLR ancha yuqori darajada va xavfsizroq bo’lib, .NETning eng muhim ustunligi — Til Mustaqilligi (Language Interoperability) ni ta’minlaydi. Ya’ni, C#, VB.NET, F# kabi turli .NET tillarida yozilgan kodni aynan bir muhitda ishga tushirishga imkon beradi.
CLR ning dasturlash siklidagi tuzilishi va vazifalariga quyidagilar kiradi:
Koddan ILkodga kompilyatsiya qilish
Dasturchi C# (yoki boshqa .NET tili) da kod yozadi. Bu kod maxsus til kompilyatori tomonidan darhol protsessor tushunadigan mahalliy mashina kodiga (native machine code) emas, balki IL (Intermediate Language — Oraliq Til) yoki CIL (Common Intermediate Language) deb ataladigan oraliq kodga kompilyatsiya qilinadi.

- Kod IL kodiga ega bo’lgan .exe yoki .dll faylga aylanadi.
- Bu .exe fayl an’anaviy C++ dan farqli o’laroq, CLR siz ishlay olmaydi. Uning ichidagi IL kod hali “qo’shimcha ishlov” talab qiladi. Bu fayli ishga tushirishda operatsion sistema doim CLR yordamiga muhtoj bo’ladi.
Bajariladigan (.exe) faylni ishga tushirish
Foydalanuvchi .exe faylni ishga tushirganda, operatsion tizim (OS) to’g’ridan-to’g’ri kodni ishga tushirish o’rniga, avvalo CLR ni yuklaydi. CLR keyin IL kodni o’zining ijro etish muhitiga oladi.
JIT kompilyatori (Just-In-Time)
CLR ning asosiy vazifalaridan biri IL kodni haqiqiy mashina kodiga aylantirishdir. Bu jarayon JIT (Just-In-Time — Ayni Vaqtida) kompilyatori tomonidan amalga oshiriladi va u CLR tarkibika kiradi.
Qanday Ishlaydi?
JIT kompilyatori satrma-satr emas, balki metod (funktsiya) bo’yicha ishlaydi. Dastur ishga tushganda, CLR IL kodni yuklaydi, lekin metod chaqirilmaguncha uni kompilyatsiya qilmaydi. Metod birinchi marta chaqirilganda, JIT kompilyatori metodning butun IL kodini CPU tushunadigan mahalliy mashina kodiga aylantiradi va bu kodni xotirada (RAM) saqlaydi. Keyingi safar xuddi shu metod chaqirilganda, CLR kompilyatsiyani takrorlamaydi, balki to’g’ridan-to’g’ri xotiradan (RAM) avvalgi JIT kompilyatsiya qilingan mashina kodini ishlatadi. Bu esa keyingi chaqiruvlarni tezlashtiradi. JIT kompilyatsiya qilingan kod faqat joriy jarayon (process) uchun ajratilgan xotirada turadi va dastur tugagach, u yo’qoladi (diskka yozilmaydi).
CLR ning asosiy vazifasi
CLR nafaqat kodni ishga tushiradi, balki .NET dasturining ishonchli, xavfsiz va samarali ishlashini ta’minlaydigan juda muhim vazifalarni bajaradi, bularga:
1. Xotirani boshqarish (Memory Management)
Bu CLR ning eng muhim vazifalaridan biridir. CLR xotirani ikki asosiy maydonga ajratadi:
- Stack xotira: Kichik va qisqa muddatli ma’lumotlar (primitiv tiplari, metod chaqiruvlari) uchun.
- Heap xotira: Ob’ektlar va uzoq muddatli ma’lumotlar (referance tiplari) uchun.
- Garbage Collector: CLR ning xotira boshqaruvi tizimining avtomatik mexanizmi. Dasturchi xotirani qo’lda bo’shatish haqida qayg’urmaydi (C/C++ dan farqli o’laroq). GC foydalanilmayotgan (erishib bo’lmaydigan) ob’ektlarni aniqlaydi va ularni Heap xotirasidan avtomatik ravishda tozalaydi, bu esa xotira sizib chiqishining (memory leak) oldini oladi.
2. Tip xavfsizligi (Type Safety)
CLR kompilyatsiya va ijro vaqtida ma’lumot turlari to’g’ri ishlatilayotganligini qat’iy tekshiradi. Masalan, integer turidagi o’zgaruvchiga string qiymatini saqlashga urinishning oldini oladi. Bu dasturning barqarorligi va ishonchliligini oshiradi.
3. Xatoliklarni boshqarish (Exception Handling)
Dastur ishlayotgan vaqtda yuzaga keladigan xatolarni standartlashtirilgan va xavfsiz tarzda boshqarish mexanizmini ta’minlaydi. Agar metodda xato yuz bersa, CLR bu xatoni ilova bo’ylab yuqoriga yuboradi, bu esa dasturga to’satdan qulab tushish o’rniga xatoni toza ushlab olish va ishlash imkonini beradi.
4. Xavfsizlik (Security)
CLR kodga ruxsat berish darajasini boshqaradi. Kod xavfsizligi (Code Access Security — CAS) kabi mexanizmlar orqali (hozirgi .NETda kamroq qo’llaniladi, lekin tushuncha mavjud) CLR kodning qanday resurslarga (fayl tizimi, tarmoq) kirish huquqiga ega ekanligini cheklaydi. Bu ayniqsa internetdan yuklab olingan ishonchsiz kodning zararli harakatlar qilishiga to’sqinlik qilishda muhim. CLR shuningdek, Reflection kabi xizmatlarning ham xavfsiz ishlashini ta’minlaydi.
5. Boshqa xizmatlar
- Ko’p oqimlilik (Threading): CLR ilovalarda bir nechta vazifani bir vaqtning o’zida bajarish (paralellik) uchun tishlarni boshqarish xizmatlarini taqdim etadi.
- Boshqa kodlar nilan hamkorlik (Interoperability): CLR boshqarilmaydigan kod (masalan, C++ DLLlari) bilan ishlash mexanizmlarini (COM Interop, P/Invoke, Marshaling) ta’minlaydi.
Xulosa
CLR (Common Language Runtime) .NET platformasining nafaqat ijro etish muhiti, balki butun tizimning hayotiy kuchidir. U C# kodini samarali va xavsiz tarzda bajarilishini ta’minlaydi, xotirani avtomatik boshqaradi, dasturni xavfsiz qiladi va yuzaga keladigan xatoliklarni bir xil tarzda boshqarish imkonini beradi.
CLR ning asosiy vazifasi — IL kodni JIT orqali mashina kodiga kompilyatsiya qilish va uning butun hayoti davomida yuqori boshqaruv xizmatlarini (xotira, xavfsizlik, xatoliklarni aniqlash) taqdim etishdir. Aynan CLR ning mavjudligi tufayli .NET dasturlari cross platformali, yuqori samarador, barqaror va ko’p til bilan ishlay olish xususiyatiga ega.
No comments:
Post a Comment
Note: only a member of this blog may post a comment.