.NET CLR je runtime okruženje koje upravlja i izvršava kod napisan u bilo kojem .NET programskom jeziku. CLR je komponenta virtualnog stroja .NET okvira. Kompilator tog jezika kompilira izvorni kod aplikacija razvijenih korištenjem jezika usklađenih s .NET-om u CLR-ov međujezik nazvan MSIL, tj. Microsoftov međujezični kod. Ovaj kod je neovisan o platformi. Usporediv je s bajt kodom u Javi. Metapodaci se također generiraju tijekom kompilacije i MSIL koda i pohranjuju u datoteku poznatu kao datoteka manifesta. Ovi metapodaci općenito se odnose na članove i tipove koje zahtijeva CLR za izvršavanje MSIL koda. Pravovremena komponenta prevoditelja CLR-a pretvara MSIL kod u izvorni kod stroja. Ovaj kod ovisi o platformi. CLR upravlja memorijom, nitima, iznimkama, izvršavanjem koda, sigurnošću koda, provjerom i kompilacijom.
binarno stablo mail order traversal
Sljedeća slika prikazuje konverziju izvornog koda u izvorni kod.
Gornja slika pretvara kod u izvorni kod, koji CPU može izvršiti.
Glavne komponente CLR-a su:
- Sustav uobičajenog tipa
- Specijacija zajedničkog jezika
- Sakupljač smeća
- Upravo u Time Compiler-u
- Metapodaci i sklopovi
1. Sustav uobičajenog tipa:
CTS daje smjernice za deklariranje, korištenje i upravljanje tipovima podataka tijekom izvođenja. Nudi međujezičnu komunikaciju. Na primjer, VB.NET ima tip podataka integer, a C# ima tip podataka int za upravljanje cijelim brojevima. Nakon kompilacije, Int32 koriste obje vrste podataka. Dakle, CTS pruža tipove podataka pomoću upravljanog koda. Sustav zajedničkog tipa pomaže u pisanju koda neovisnog o jeziku.
Pruža dvije kategorije tipova.
2. Specifikacija zajedničkog jezika (CLS):
Specifikacija zajedničkog jezika (CLS) sadrži skup pravila kojih se trebaju pridržavati svi jezici koje podržava NET. Zajednička pravila olakšavaju implementaciju jezične integracije i pomažu u međujezičnom nasljeđivanju i otklanjanju pogrešaka. Svaki jezik koji podržava NET Framework ima vlastita pravila sintakse. Ali CLS osigurava interoperabilnost među aplikacijama razvijenim korištenjem NET jezika.
3. Odvoz smeća:
Garbage Collector je komponenta CLR-a koja radi kao automatski upravitelj memorije. Pomaže upravljati memorijom automatskim dodjeljivanjem memorije prema zahtjevu. Dodjeljuje heap memoriju objektima. Kada objekti nisu u upotrebi, vraća memoriju koja im je dodijeljena za buduću upotrebu. Također osigurava sigurnost objekata ne dopuštajući jednom objektu da koristi sadržaj drugog objekta.
4. Just in Time (JIT) kompajler:
JIT kompajler je važna komponenta CLR-a. Pretvara MSIL kod u izvorni kod (tj. kod specifičan za stroj). .NET program kompilira se eksplicitno ili implicitno. Programer ili programer poziva određeni kompilator da kompajlira program u eksplicitnoj kompilaciji. Kod implicitne kompilacije, program se dva puta prevodi. Izvorni kod se kompilira u Microsoftov srednji jezik (MSIL) tijekom prvog procesa kompilacije. MSIL kod se pretvara u izvorni kod u drugom procesu kompilacije. Ovaj proces se naziva JIT kompilacija. Postoje tri vrste JIT prevodilaca - Pre, Econo i Normal. Pre JIT Compiler kompilira cijeli MSIL kod u izvorni kod prije izvršenja. Econo JIT Compiler kompilira samo one dijelove MSIL koda koji su potrebni tijekom izvođenja i uklanja one dijelove koji više nisu potrebni. Normalni JIT kompajler također kompilira samo one dijelove MSIL koda koji su potrebni tijekom izvođenja, ali ih stavlja u predmemoriju za buduću upotrebu. Ne zahtijeva ponovno kompiliranje već korištenih dijelova budući da su oni smješteni u predmemoriju.
5. Metapodaci:
Metapodaci su binarne informacije o programu, pohranjene u CLR prijenosnoj izvršnoj datoteci (PE) zajedno s MSIL kodom ili u memoriji. Tijekom izvođenja MSIL-a, metapodaci se također učitavaju u memoriju radi pravilne interpretacije klasa i srodnih. Informacije koje se koriste u kodu. Dakle, metapodaci pomažu u implementaciji koda na jezično neutralan način ili u postizanju jezične interoperabilnosti.
6. Sklopovi:
Sklop je temeljna jedinica grupiranja fizičkog koda. Sastoji se od manifesta sklopa, metapodataka, MSIL koda i skupa resursa poput slikovnih datoteka. Također se smatra osnovnom jedinicom za implementaciju, kontrolom verzija, ponovnom upotrebom, sigurnosnim dozvolama itd.
.NET CLR funkcije
Slijede funkcije CLR-a.
- Pretvara program u izvorni kod.
- Obrađuje iznimke
- Omogućuje tipsku sigurnost
- Upravljanje memorijom
- Pruža sigurnost
- Poboljšane performanse
- Neovisan o jeziku
- Neovisan o platformi
- Kolekcija smeća
- Pruža jezične značajke kao što su nasljeđivanje, sučelja i preopterećenje za objektno orijentirane programe.
Kod koji se izvodi s CLR-om naziva se upravljani kod, dok se kod izvan CLR-a naziva neupravljani kod. CLR također pruža sloj interoperabilnosti, koji omogućuje međuoperativnost upravljanih i neupravljanih kodova.
1. Upravljani kod:
Svaki jezik koji je napisan u okviru .NET je upravljani kod. Upravljani kod koristi CLR, koji brine o vašim aplikacijama upravljanjem memorijom, rukovanjem sigurnošću, dopuštanjem otklanjanja pogrešaka na više jezika itd. Proces upravljanog koda prikazan je na slici:
2. Neupravljani kod:
Kod razvijen izvan okvira .NET poznat je kao neupravljani kod. Za aplikacije koje se ne izvode pod kontrolom CLR-a kaže se da se njima ne upravlja. Određeni jezici kao što je C++ mogu se koristiti za pisanje takvih aplikacija, kao što su funkcije pristupa niske razine operativnog sustava. Pozadinska kompatibilnost s VB, ASP i COM primjeri su neupravljanog koda. Ovaj kod se izvršava uz pomoć klasa omotača. Proces neupravljanog koda prikazan je u nastavku:
.NET CLR verzije
CLR se s vremena na vrijeme ažurira kako bi pružio bolje performanse.
.NET verzija | CLR verzija |
---|---|
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 struktura
Slijedi struktura komponenti Common Language Runtimea.
Podrška za biblioteku osnovne klase
To je biblioteka klasa koja podržava klase za .NET aplikaciju.
Podrška za niti
Upravlja paralelnim izvođenjem višenitne aplikacije.
COM Marshaler
Omogućuje komunikaciju između COM objekata i aplikacije.
Sigurnosni motor
Provodi sigurnosna ograničenja.
Debug Engine
Omogućuje vam otklanjanje pogrešaka u različitim vrstama aplikacija.
Tip Checker
Provjerava tipove koji se koriste u aplikaciji i potvrđuje da odgovaraju standardima koje pruža CLR.
Upravitelj kodova
Upravlja kodom tijekom izvođenja.
Sakupljač smeća
Oslobađa neiskorištenu memoriju i dodjeljuje je novoj aplikaciji.
Rukovatelj iznimkama
Obrađuje iznimku tijekom izvođenja kako bi se izbjegao kvar aplikacije.
ClassLoader
Koristi se za učitavanje svih klasa tijekom izvođenja.