Semblable à la Machine Virtuelle Java (JVM), l' .net CLR est un byte-code de l'interprétation de la machine virtuelle.
La JVM interprète des programmes qui contiennent java byte codes et les .net CLR interprète des programmes qui contiennent ce que Microsoft appelle "le Langage Intermédiaire" des instructions. Il y a des différences entre ces octets de codes, mais les machines virtuelles sont similaires et aspire à fournir des fonctionnalités similaires.
Ces deux machine virtuelle implémentations ont la possibilité de compiler leur entrée bytecode pour le langage machine de l'ordinateur qu'ils sont en cours d'exécution sur. Ceci est appelé "Juste À Temps de Compilation JIT ()" et le code de sortie produite est appelée "JIT code." Parce que le JIT code contiennent des séquences d'instructions en langage machine du PROCESSEUR de l'ordinateur, ce code est parfois désigné comme "natifs" du code.
Cependant, JIT code est qualitativement et quantitativement différente de code natif, comme expliqué ci-dessous. Pour cette raison, cet article considère JIT code pour être rien de plus qu'une implémentation native de la Machine Virtuelle lors de l'exécution d'un particulier bytecode programme.
Une caractéristique que ces deux Machines Virtuelles (VMs) aspire à fournir est de la sécurité dans le formulaire de prévenir un certain nombre de dangereuses erreurs de programmation. Par exemple, le titre de ce forum d'un site web, stackoverflow, est inspiré par un tel type de dangereux erreur qui est possible en code natif.
Afin d'assurer la sécurité et la sécurité de l'exécution, le VMs de mettre en œuvre la sécurité de type à la "Machine Virtuelle" de niveau. Les affectations de mémoire virtuelle sont nécessaires pour stocker le type de données qui est tenue à cet emplacement de la mémoire. Par exemple, si un nombre entier est poussé sur la pile, il n'est pas possible de la pop un double de la pile. C-style "unions", sont interdites. Les pointeurs et l'accès direct à la mémoire sont interdites.
Nous ne pouvions pas obtenir les mêmes avantages en imposant un langage orienté objet-cadre sur les développeurs si le résultat est un fichier binaire natif comme un fichier EXE. Dans ce cas, nous ne serions pas en mesure de distinguer entre les binaires générés à l'aide du cadre et des Exe généré par un utilisateur malveillant employant d'autres sources que le cadre.
Dans le cas de la VMs, le type de sécurité est appliquée au "niveau le plus bas" que le programmeur est autorisé à accéder. (En négligeant pour l'instant qu'il est possible d'écrire géré en code natif, ce qui est.) Par conséquent, aucun utilisateur ne rencontrerez une application qui effectue l'une des opérations dangereuses qui nécessitent un accès direct à la mémoire des emplacements et des pointeurs.
Dans la pratique, l' .net CLR une manière d'écrire du code natif qui peut être appelé par .net "géré" du code. Dans ce cas, la charge est sur le code natif à l'auteur de ne pas faire du pointeur et de la mémoire des erreurs.
Comme la JVM et .net CLR effectuer la compilation JIT, soit VM crée en fait un natif binaire compilé à partir du bytecode fourni. Cette "JIT code" effectue plus rapidement que la VM est l'interprète de l'exécution, parce que même le langage machine code produit par JIT contient toutes les VM de sécurité vérifie que l'ordinateur virtuel effectuer. En conséquence, l'équipe de code de sortie n'est pas aussi rapide que le code natif qui seraient normalement pas contenir de nombreux au moment de l'exécution des contrôles. Toutefois, cette vitesse de la performance inconvénient est échangé pour une amélioration de la fiabilité, y compris la sécurité; en particulier, l'utilisation de non initialisé de stockage est empêché, de sécurité du type de missions est appliquée, de la portée de la vérification est effectuée (donc pile et tas dépassements de la mémoire tampon empêché), objet des durées de vie sont gérées par la collecte des ordures, l'allocation dynamique est de type sécurisé. Un environnement d'exécution de ce moment de l'exécution comportement de contrôle, la mise en œuvre de la spécification d'une machine virtuelle et n'est guère plus qu'un langage machine de la réalisation d'une machine virtuelle.