logo

.NET Common Language Runtime (CLR)

.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.

Net Common Language Runtime

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
Net Common Language Runtime

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.

    Vrsta vrijednosti:Vrsta vrijednosti pohranjuje podatke u memoriju dodijeljenu na stogu ili ugrađenu u strukturu. Ova kategorija Type sadrži direktorij podataka. Ako se vrijednost jedne varijable kopira u drugu, obje varijable neovisno pohranjuju podatke. Može biti ugrađenih tipova, korisnički definiranih ili enumeracijskih tipova. Ugrađeni tipovi su primitivni tipovi podataka kao što su numerički, Booleov, char i datum. Korisnici u izvornom kodu stvaraju korisnički definirane tipove. Nabrajanje se odnosi na skup nabrojenih vrijednosti predstavljenih oznakama, ali pohranjenih kao numerički tip.
    Net Common Language Runtime Vrsta reference:Vrsta reference pohranjuje referencu na vrijednost memorijske adrese i alocirana je na gomilu. Heap memorija se koristi za dinamičku dodjelu memorije. Vrsta reference ne sadrži izravno stvarne podatke, ali sadrži adresu podataka. Kad god se napravi objekt referentnog tipa, on kopira adresu, a ne stvarne podatke. Stoga će se dvije varijable odnositi na iste podatke. Ako se podaci jednog objekta Reference Type promijene, isto se odražava i na drugi objekt. Referentni tipovi mogu biti samoopisivi tipovi, tipovi pokazivača ili tipovi smetnji. Tipovi koji se sami opisuju mogu biti nizovi, nizovi i tipovi klasa koji pohranjuju metapodatke o sebi.

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:

Net Common Language Runtime

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 Common Language Runtime

.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.

Net Common Language Runtime

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.