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