logo

.NET Common Language Runtime (CLR)

.NET CLR est un environnement d'exécution qui gère et exécute le code écrit dans n'importe quel langage de programmation .NET. CLR est le composant de machine virtuelle du framework .NET. Le compilateur de ce langage compile le code source des applications développées à l'aide de langages compatibles .NET dans le langage intermédiaire de CLR appelé MSIL, c'est-à-dire le code de langage intermédiaire de Microsoft. Ce code est indépendant de la plateforme. C’est comparable au byte code en Java. Les métadonnées sont également générées lors de la compilation et du code MSIL et stockées dans un fichier appelé fichier Manifest. Ces métadonnées concernent généralement les membres et les types requis par le CLR pour exécuter le code MSIL. Un composant compilateur juste à temps de CLR convertit le code MSIL en code natif de la machine. Ce code dépend de la plateforme. CLR gère la mémoire, les threads, les exceptions, l'exécution du code, la sécurité du code, la vérification et la compilation.

couverture rigide ou livre de poche

La figure suivante montre la conversion du code source en code natif.

Net Common Language Runtime

Le chiffre ci-dessus convertit le code en code natif, que le CPU peut exécuter.

Les principaux composants du CLR sont :

  • Système de type commun
  • Spéciation du langage commun
  • Éboueur
  • Compilateur juste à temps
  • Métadonnées et assemblys
Net Common Language Runtime

1. Système de type commun :

CTS fournit des directives pour déclarer, utiliser et gérer les types de données au moment de l'exécution. Il offre une communication multilingue. Par exemple, VB.NET a un type de données entier et C# a un type de données int pour gérer les entiers. Après compilation, Int32 est utilisé par les deux types de données. Ainsi, CTS fournit les types de données à l’aide de code managé. Un système de types commun aide à écrire du code indépendant du langage.

Il propose deux catégories de types.

    Type de valeur:Un type valeur stocke les données dans la mémoire allouée sur la pile ou en ligne dans une structure. Cette catégorie de Type contient le répertoire de données. Si la valeur d'une variable est copiée dans une autre, les deux variables stockent les données indépendamment. Il peut s'agir de types intégrés, définis par l'utilisateur ou de types énumérations. Les types intégrés sont des types de données primitifs tels que numérique, booléen, caractère et date. Les utilisateurs dans le code source créent des types définis par l'utilisateur. Une énumération fait référence à un ensemble de valeurs énumérées représentées par des étiquettes mais stockées sous forme numérique.
    Net Common Language Runtime Type de référence:Un type Référence stocke une référence à la valeur d’une adresse mémoire et est alloué sur le tas. La mémoire tas est utilisée pour l’allocation dynamique de mémoire. Le type de référence ne contient pas directement les données réelles mais contient l'adresse des données. Chaque fois qu'un objet de type référence est créé, il copie l'adresse et non les données réelles. Par conséquent, deux variables feront référence aux mêmes données. Si les données d’un objet de type référence sont modifiées, la même chose est reflétée pour l’autre objet. Les types de référence peuvent être des types auto-descriptifs, des types de pointeur ou des types d’interférence. Les types auto-descriptifs peuvent être des types de chaîne, de tableau et de classe qui stockent des métadonnées les concernant.

2. Spécification du langage commun (CLS) :

Common Language Spécification (CLS) contient un ensemble de règles à suivre par tous les langages pris en charge par NET. Les règles communes facilitent la mise en œuvre de l'intégration du langage et facilitent l'héritage et le débogage multilingue. Chaque langage pris en charge par NET Framework possède ses propres règles de syntaxe. Mais CLS garantit l'interopérabilité entre les applications développées à l'aide des langages NET.

3. Collecte des déchets :

Garbage Collector est un composant de CLR qui fonctionne comme un gestionnaire de mémoire automatique. Il aide à gérer la mémoire en allouant automatiquement la mémoire en fonction des besoins. Il alloue de la mémoire tas aux objets. Lorsque les objets ne sont pas utilisés, il récupère la mémoire qui leur est allouée pour une utilisation ultérieure. Il garantit également la sécurité des objets en interdisant à un objet d'utiliser le contenu d'un autre objet.

4. Compilateur juste à temps (JIT) :

Le compilateur JIT est un composant important de CLR. Il convertit le code MSIL en code natif (c'est-à-dire en code spécifique à la machine). Le programme .NET est compilé explicitement ou implicitement. Le développeur ou le programmeur appelle un compilateur particulier pour compiler le programme dans la compilation explicite. En compilation implicite, le programme est compilé deux fois. Le code source est compilé en Microsoft Intermediate Language (MSIL) lors du premier processus de compilation. Le code MSIL est converti en code natif lors du deuxième processus de compilation. Ce processus est appelé compilation JIT. Il existe trois types de compilateurs JIT : Pre, Econo et Normal. Le compilateur Pre JIT compile l'intégralité du code MSIL en code natif avant son exécution. Econo JIT Compiler compile uniquement les parties du code MSIL requises lors de l'exécution et supprime les parties qui ne sont plus nécessaires. Le compilateur JIT normal compile également uniquement les parties du code MSIL requises lors de l'exécution, mais les place en cache pour une utilisation ultérieure. Il ne nécessite pas de recompilation des parties déjà utilisées car elles ont été placées en mémoire cache.

5. Métadonnées :

Une métadonnée est une information binaire sur le programme, soit stockée dans un fichier exécutable portable (PE) CLR avec le code MSIL, soit dans la mémoire. Lors de l'exécution de MSIL, les métadonnées sont également chargées en mémoire pour une interprétation correcte des classes et associées. Informations utilisées dans le code. Ainsi, les métadonnées permettent d’implémenter le code de manière neutre ou d’assurer l’interopérabilité des langages.

6. Assemblées :

Un assembly est une unité fondamentale de regroupement de codes physiques. Il se compose du manifeste d'assembly, des métadonnées, du code MSIL et d'un ensemble de ressources telles que des fichiers image. Il est également considéré comme une unité de déploiement de base, de contrôle de version, de réutilisation, d'autorisations de sécurité, etc.

Fonctions .NET CLR

Voici les fonctions du CLR.

  • Il convertit le programme en code natif.
  • Gère les exceptions
  • Fournit une sécurité de type
  • Gestion de la mémoire
  • Assure la sécurité
  • Performance améliorée
  • Indépendant de la langue
  • Indépendant de la plateforme
  • Collecte des ordures
  • Fournit des fonctionnalités de langage telles que l'héritage, les interfaces et la surcharge pour les programmes orientés objet.

Le code qui s'exécute avec CLR est appelé code managé, tandis que le code en dehors du CLR est appelé code non managé. Le CLR fournit également une couche d'interopérabilité, qui permet aux codes gérés et non gérés d'interopérer.

1. Code géré :

Tout langage écrit dans le framework .NET est du code managé. Le code managé utilise CLR, qui s'occupe de vos applications en gérant la mémoire, en gérant la sécurité, en permettant le débogage multilingue, etc. Le processus du code managé est illustré dans la figure :

Net Common Language Runtime

2. Code non géré :

Le code développé en dehors du framework .NET est appelé code non managé. Les applications qui ne s'exécutent pas sous le contrôle du CLR sont dites non gérées. Certains langages comme le C++ peuvent être utilisés pour écrire de telles applications, comme les fonctions d'accès de bas niveau du système d'exploitation. La compatibilité en arrière-plan avec VB, ASP et COM sont des exemples de code non managé. Ce code est exécuté à l'aide de classes wrapper. Le processus de code non géré est illustré ci-dessous :

Net Common Language Runtime

Versions .NET CLR

Le CLR se met à jour de temps en temps pour offrir de meilleures performances.

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

Structure CLR .NET

Voici la structure des composants de Common Language Runtime.

Net Common Language Runtime

Prise en charge de la bibliothèque de classes de base

Il s'agit d'une bibliothèque de classes qui prend en charge les classes pour l'application .NET.

Prise en charge des fils de discussion

Il gère l'exécution parallèle de l'application multi-thread.

COM Marshaleur

Il assure la communication entre les objets COM et l'application.

Moteur de sécurité

Il applique des restrictions de sécurité.

Moteur de débogage

Il vous permet de déboguer différents types d'applications.

Vérificateur de type

Il vérifie les types utilisés dans l'application et vérifie qu'ils correspondent aux normes fournies par le CLR.

Gestionnaire de codes

Il gère le code au moment de l'exécution.

Éboueur

Il libère la mémoire inutilisée et l'alloue à une nouvelle application.

Gestionnaire d'exceptions

Il gère l'exception au moment de l'exécution pour éviter l'échec de l'application.

Chargeur de classe

Il est utilisé pour charger toutes les classes au moment de l'exécution.