Analyse approfondie des principes d'exécution C# (images et textes)

不言
Libérer: 2018-10-20 17:22:24
avant
3064 Les gens l'ont consulté

Le contenu de cet article est une analyse approfondie (images et textes) des principes d'exécution de C#. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Pourquoi Unity3D peut-il exécuter C#, quelle est la relation entre C# et Mono, et quelle est la relation entre Mono et .Net Framework ? Parlons de ce sujet en profondeur !

Commencez par le principe de la compilation

Présentez le compilateur en une phrase : Un compilateur convertit le code source (langage source) écrit dans un certain langage de programmation en un autre langage de programmation (langage cible) sous une forme équivalente de programme. Habituellement, nous convertissons un certain langage de haut niveau (tel que C, C++, C#, Java) en un langage de bas niveau (langage assembleur, langage machine).

Le compilateur fonctionne sous forme de pipeline et se divise en plusieurs étapes : code source → analyse lexicale → analyse syntaxique → analyse sémantique → code cible → lien → fichier exécutable. Les compilateurs modernes seront plus complexes et davantage de processus seront ajoutés au milieu, tels que les préprocesseurs, la génération de code intermédiaire, l'optimisation du code, etc.

Analyse approfondie des principes dexécution C# (images et textes)

Qu'est-ce qu'une machine virtuelle

Une machine virtuelle (VM), au sens simple, signifie ? qu'il peut exécuter un programme d'instructions spécifique. Afin d'exécuter des instructions, certaines fonctionnalités de support sont également nécessaires, telles que des registres, des piles, etc. Une machine virtuelle peut être très complexe, si complexe qu'elle simule du matériel informatique réel, ou elle peut être si simple qu'elle ne peut effectuer que des additions, des soustractions, des multiplications et des divisions.

Dans le domaine des compilateurs, les machines virtuelles exécutent généralement un langage appelé code intermédiaire. Le code intermédiaire est converti d'un langage de haut niveau en. Prenons Java comme exemple. Ce qui est généré après la compilation Java n'est pas un fichier exécutable, mais un fichier ByteCode (bytecode), qui contient le code de Java. Le code source est converti en code équivalent sous forme de bytecode. La machine virtuelle Java (JVM) est responsable de l'exécution de ce fichier.

Il existe deux manières pour une machine virtuelle d'exécuter du code intermédiaire : l'exécution interprétée et JIT (compilation juste à temps). L'interprétation et l'exécution signifient exécuter chaque instruction une par une, JIT Le code intermédiaire est d'abord compilé en code machine au démarrage de son exécution, puis le code machine est exécuté. Puisque le code intermédiaire est exécuté, différentes machines virtuelles implémentées sur différentes plates-formes peuvent exécuter le même code intermédiaire, réalisant ainsi une multiplateforme.

int run(context* ctx, code* c) {
    for (cmd in c->cmds) {
        switch (cmd.type) {
            case ADD:
            // todo add
            break;
            case SUB:
            // todo subtract
            break;
            // ...
        }
    }
    return 0;
}
Copier après la connexion

Pour résumer, la machine virtuelle elle-même n'est pas multiplateforme, mais le langage est multiplateforme. Pour les développeurs, ils n'ont qu'à se soucier du langage de développement et n'ont pas besoin de se soucier de la manière dont. la machine virtuelle est implémentée. Oui, c'est également le cas. La raison pour laquelle Java peut être multiplateforme est la même que C#. Par extension, en théorie, n'importe quel langage peut être multiplateforme, à condition que des fonctionnalités de support telles qu'un compilateur ou une machine virtuelle soient implémentées sur la plateforme correspondante.

Qu'est-ce que C# et qu'est-ce que IL ?

C# est un langage de programmation orienté objet de haut niveau lancé par Microsoft basé sur le framework .NET. Microsoft a publié ce langage en 2000, dans l'espoir de l'utiliser pour remplacer Java. Pour une introduction plus détaillée, veuillez vous référer au wiki C#.

C# est un langage. Microsoft a personnalisé une spécification de langage pour celui-ci, fournissant un service complet à guichet unique depuis le développement, la compilation, le déploiement et l'exécution. La dernière spécification sera publiée de temps en temps, ajoutant. quelques nouvelles fonctionnalités linguistiques. D’un point de vue grammatical, C# est un langage très complet et très confortable à écrire.

C# Semblable à Java, C# sera compilé dans un langage intermédiaire (CIL, Common Intermediate Language, également appelé MSIL). C'est également un langage de haut niveau, et la machine virtuelle exécutant CIL s'appelle CLR (Common Language Runtime). Habituellement, nous mettons C#, CIL, CLR, ainsi qu'un ensemble de bibliothèques de classes de base fournies par Microsoft appelées .Net Framework.

Analyse approfondie des principes dexécution C# (images et textes)

C# est né pour conquérir l'univers, mais malheureusement, en raison de la fermeture de Microsoft, cet objectif n'a pas été atteint. Bien sûr, C# se porte toujours bien maintenant, revitalisé grâce aux jeux, grâce à Unity3D, grâce à Mono.

.Net Framework vs Mono

Mono est une implémentation multiplateforme de .Net Framework. Mono a fait une grande chose en réimplémentant le CLR sur toutes les plates-formes prises en charge et en réimplémentant la bibliothèque de classes de base fournie par .Net Framework.

Analyse approfondie des principes dexécution C# (images et textes)

Ci-dessus, le travail de Compile Time peut en fait utiliser directement les réalisations existantes de Microsoft Tant que le Runtime CLR est implémenté sur d'autres plates-formes, ce travail. La quantité est non seulement importante, mais la compatibilité doit également être assurée. C'est un projet très énorme. Félicitations !

C dans Unity3D

Unity3D intègre une machine virtuelle Mono. Comme vous pouvez le savoir ci-dessus, lorsqu'une machine virtuelle d'une certaine plate-forme est implémentée, le langage peut s'exécuter sur cette plate-forme. Par conséquent, à proprement parler, Unity3D utilise la machine virtuelle Mono Run. le code IL généré par C# compilé par le compilateur.

Unity3D utilise C# comme langage de développement par défaut. De plus, il prend également en charge JS et BOO, car Unity3D a développé des compilateurs correspondants pour compiler JS et BOO en IL.

Résumé

C# sous Windows utilise le compilateur C# de Microsoft pour générer du code IL et l'exécuter dans le CLR.

C#, sur les plateformes autres que Windows, génère du code IL via le compilateur Mono et l'exécute dans la machine virtuelle Mono. Vous pouvez également exécuter directement le code IL compilé (compilé via n'importe quelle plateforme).

Théoriquement, si vous créez un langage, implémentez un compilateur pour une certaine plate-forme, puis implémentez une machine virtuelle conforme aux spécifications du langage pour toutes les plates-formes, votre langage peut fonctionner sur n'importe quelle plate-forme.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!