logo

.NET Common Language Runtime (CLR)

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

Net Common Language Runtime

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

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.

    Tipus de valor:Un tipus de valor emmagatzema les dades a la memòria assignades a la pila o en línia en una estructura. Aquesta categoria de Tipus conté el directori de dades. Si el valor d'una variable es copia a una altra, ambdues variables emmagatzemen dades de manera independent. Pot ser de tipus integrats, definits per l'usuari o tipus enumeracions. Els tipus integrats són tipus de dades primitius com ara numèrics, booleans, char i data. Els usuaris del codi font creen tipus definits per l'usuari. Una enumeració fa referència a un conjunt de valors enumerats representats per etiquetes però emmagatzemats com a tipus numèric.
    Net Common Language Runtime Tipus de referència:Un tipus de referència emmagatzema una referència al valor d'una adreça de memòria i s'assigna a l'heap. La memòria heap s'utilitza per a l'assignació de memòria dinàmica. El tipus de referència no conté dades reals directament, sinó que conté l'adreça de les dades. Sempre que es fa un objecte de tipus de referència, copia l'adreça i no les dades reals. Per tant, dues variables es referiran a les mateixes dades. Si es canvien les dades d'un objecte de tipus de referència, es reflecteix el mateix per a l'altre objecte. Els tipus de referència poden ser tipus d'autodescripció, tipus de punter o tipus d'interferència. Els tipus d'autodescripció poden ser tipus de cadena, matriu i classe que emmagatzemen metadades sobre ells mateixos.

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:

Net Common Language Runtime

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ó:

Net Common Language Runtime

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.

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