.NET CLR és un entorn d'execució que gestiona i executa el codi escrit en qualsevol llenguatge de programació .NET. CLR és el component de la màquina virtual del framework .NET. El compilador d'aquest llenguatge compila el codi font de les aplicacions desenvolupades amb llenguatges compatibles amb .NET en el llenguatge intermedi de CLR anomenat MSIL, és a dir, codi de llenguatge intermedi de Microsoft. Aquest codi és independent de la plataforma. És comparable al codi de bytes a Java. Les metadades també es generen durant la compilació i el codi MSIL i s'emmagatzemen en un fitxer conegut com a fitxer Manifest. Aquestes metadades es refereixen generalment a membres i tipus requerits per CLR per executar codi MSIL. Un component del compilador just-in-time de CLR converteix el codi MSIL en codi natiu de la màquina. Aquest codi depèn de la plataforma. CLR gestiona la memòria, els fils, les excepcions, l'execució de codi, la seguretat del codi, la verificació i la compilació.
Funció prototip de c++
La figura següent mostra la conversió del codi font en codi natiu.
La figura anterior converteix el codi en codi natiu, que la CPU pot executar.
Els components principals del CLR són:
- Sistema de tipus comú
- Especiació de la llengua comuna
- Abocador
- Compilador Just in Time
- Metadades i assemblees
1. Sistema de tipus comú:
CTS proporciona directrius per declarar, utilitzar i gestionar tipus de dades en temps d'execució. Ofereix comunicació entre llengües. Per exemple, VB.NET té un tipus de dades enter i C# té un tipus de dades int per gestionar nombres enters. Després de la compilació, els dos tipus de dades utilitzen Int32. Per tant, CTS proporciona els tipus de dades mitjançant codi gestionat. Un sistema de tipus comú ajuda a escriure codi independent de l'idioma.
Proporciona dues categories de tipus.
2. Especificació del llenguatge comú (CLS):
Common Language Specification (CLS) conté un conjunt de regles que han de seguir tots els idiomes compatibles amb NET. Les regles comunes faciliten la implementació de la integració lingüística i ajuden a l'herència i la depuració entre llengües. Cada llenguatge compatible amb NET Framework té les seves pròpies regles de sintaxi. Però CLS garanteix la interoperabilitat entre les aplicacions desenvolupades amb llenguatges NET.
3. Recollida d'escombraries:
Garbage Collector és un component de CLR que funciona com a gestor automàtic de memòria. Ajuda a gestionar la memòria assignant memòria automàticament segons el requisit. Assigna memòria de pila als objectes. Quan els objectes no estan en ús, recupera la memòria assignada per a un ús futur. També garanteix la seguretat dels objectes en no permetre que un objecte utilitzi el contingut d'un altre objecte.
4. Compilador Just in Time (JIT):
El compilador JIT és un component important de CLR. Converteix el codi MSIL en codi natiu (és a dir, codi específic de la màquina). El programa .NET es compila de manera explícita o implícita. El desenvolupador o programador crida a un compilador particular per compilar el programa en la compilació explícita. En la compilació implícita, el programa es compila dues vegades. El codi font es compila a Microsoft Intermediate Language (MSIL) durant el primer procés de compilació. El codi MSIL es converteix en codi natiu en el segon procés de compilació. Aquest procés s'anomena compilació JIT. Hi ha tres tipus de compiladors JIT: Pre, Econo i Normal. Pre JIT Compiler compila tot el codi MSIL en codi natiu abans de l'execució. Econo JIT Compiler només compila les parts del codi MSIL necessàries durant l'execució i elimina aquelles parts que ja no són necessàries. El compilador JIT normal també compila només les parts del codi MSIL necessàries durant l'execució, però les col·loca a la memòria cau per a un ús futur. No requereix recompilacions de peces ja utilitzades, ja que s'han col·locat a la memòria cau.
5. Metadades:
Una metadades és una informació binària sobre el programa, emmagatzemada en un fitxer CLR Portable Executable (PE) juntament amb el codi MSIL o a la memòria. Durant l'execució de MSIL, les metadades també es carreguen a la memòria per a la correcta interpretació de les classes i relacionades. Informació utilitzada en el codi. Per tant, les metadades ajuden a implementar el codi d'una manera neutral en el llenguatge o a aconseguir la interoperabilitat del llenguatge.
6. Muntatges:
Un conjunt és una unitat fonamental de l'agrupació de codi físic. Consisteix en el manifest del conjunt, les metadades, el codi MSIL i un conjunt de recursos com ara fitxers d'imatge. També es considera una unitat bàsica de desplegament, control de versions, reutilització, permisos de seguretat, etc.
Funcions .NET CLR
A continuació es mostren les funcions del CLR.
- Converteix el programa en codi natiu.
- Gestiona les excepcions
- Ofereix seguretat de tipus
- Gestió de la memòria
- Ofereix seguretat
- Rendiment millorat
- Independent de la llengua
- Plataforma independent
- Recollida d'escombraries
- Proporciona funcions del llenguatge com l'herència, les interfícies i la sobrecàrrega per a programes orientats a objectes.
El codi que s'executa amb CLR s'anomena codi gestionat, mentre que el codi fora del CLR s'anomena codi no gestionat. El CLR també proporciona una capa d'interoperabilitat, que permet interoperar tant els codis gestionats com els no gestionats.
1. Codi gestionat:
Qualsevol llenguatge escrit al .NET framework és codi gestionat. El codi gestionat utilitza CLR, que vetlla per les teves aplicacions gestionant la memòria, gestionant la seguretat, permetent la depuració entre idiomes, etc. El procés del codi gestionat es mostra a la figura:
2. Codi no gestionat:
El codi desenvolupat fora del framework .NET es coneix com a codi no gestionat. Es diu que les aplicacions que no s'executen sota el control del CLR no estan gestionades. Alguns llenguatges com C++ es poden utilitzar per escriure aquestes aplicacions, com ara funcions d'accés de baix nivell del sistema operatiu. La compatibilitat de fons amb VB, ASP i COM són exemples de codi no gestionat. Aquest codi s'executa amb l'ajuda de classes d'embolcall. El procés de codi no gestionat es mostra a continuació:
Versions .NET CLR
El CLR s'actualitza de tant en tant per oferir un millor rendiment.
Versió .NET | Versió 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 |
Estructura .NET CLR
A continuació es mostra l'estructura dels components de Common Language Runtime.
Suport a la biblioteca de classes base
És una biblioteca de classes que admet classes per a l'aplicació .NET.
Suport de fil
Gestiona l'execució paral·lela de l'aplicació multiprocés.
COM Marshaler
Proporciona comunicació entre els objectes COM i l'aplicació.
Motor de seguretat
Aplica restriccions de seguretat.
Motor de depuració
Permet depurar diferents tipus d'aplicacions.
Comprovador de tipus
Comprova els tipus utilitzats a l'aplicació i verifica que coincideixen amb els estàndards proporcionats pel CLR.
Gestor de codi
Gestiona el codi en temps d'execució.
Abocador
Allibera la memòria no utilitzada i l'assigna a una nova aplicació.
Gestor d'excepcions
Gestiona l'excepció en temps d'execució per evitar errors de l'aplicació.
ClassLoader
S'utilitza per carregar totes les classes en temps d'execució.