1- Le code source
Théoriquement, tout langage de programmation est portable sur la plate-forme .Net. Il faut que le langage réponde aux spécifications du ” common language runtime “ (CLR), élaborées par l’Ecma (un organisme chargé d’élaborer des standards) et qu’il existe un compilateur du langage pour .Net.
2- La compilation du code source en instructions MSIL
Le compilateur .Net pour le langage concerné se charge de traduire le code source en instructions Microsoft Intermediate Language (MSIL). Il s’agit d’un langage semi-compilé, proche du langage d’assemblage. Le compilateur produit également des métadonnées : elles ont pour rôle de décrire les types de données en provenance du code source. Elles sont stockées dans des fichiers au format binaire.
3- La compilation du langage MSIL en code natif
Les instructions en langage MSIL ne sont pas spécifiques à une plate-forme particulière. Il faut donc qu’elles soient compilées en fonction de la plate-forme sur laquelle elles doivent être exécutées. Pour ce faire, le système d’exécution dispose de compilateurs en temps utile (” just in time “?” JIT).
4- L’importation de fichier
Grâce au caractère indépendant du langage MSIL, il est possible de récupérer un type de données dans un langage autre que celui dans lequel il a été défini. En effet, lorsque le compilateur .Net traduit les instructions d’un code source en MSIL, il enregistre les types dans des métadonnées. Par la suite, le code MSIL produit peut être, en théorie, réutilisé dans n’importe quel autre langage de développement. Ce processus d’importation des types de données peut être répété autant de fois que nécessaire.
5- Le moteur d’exécution
Le moteur d’exécution de .Net s’appelle le ” common language runtime “ (CLR). Il se comporte de façon similaire à la machine virtuelle Java. Son rôle consiste à garantir l’exécution du code natif à la plate-forme. Le niveau de contrôle que peut exercer le moteur d’exécution dépend des métadonnées que le code MSIL lui transmet. Lorsqu’elles sont suffisantes, c’est-à-dire quand on est en présence de code qualifié de ” géré “ (appelé aussi” managed code “), le moteur surveille l’exécution du programme. Dans le cas contraire, le code, qualifié de non géré (ou ” unmanaged code “), ne sera pas surveillé lors de son exécution.