Compilateur : Un compilateur est un programme qui convertit le code source (langage original) écrit dans un langage de programmation en un autre (langage cible). La compilation est le processus de traduction du code source (généralement un langage de haut niveau) vers du code objet (généralement un langage de bas niveau ou un langage machine) pouvant être exécuté directement par un ordinateur ou une machine virtuelle.
Sur la plateforme .NET, il existe deux compilateurs différents à différents stades d’exécution du modèle : l’un appelé le compilateur Roslyn, qui compile le code C# et VB en assemblages ; L’autre s’appelle le compilateur RyuJIT, qui compile le code IL (langage intermédiaire) dans l’assembleur en code machine.
Cet article commence par le compilateur Roslyn. Nous n’avons pas besoin d’approfondir son fonctionnement, mais de comprendre comment cela fonctionne, de savoir à quoi cela peut servir.
Au départ, le compilateur du langage C# était écrit en C++, puis Microsoft a introduit un nouveau compilateur écrit en C# lui-même : Roslyn, qui est un compilateur bootstrap.
Le compilateur bootstrap signifie que le compilateur d’un certain langage de programmation est écrit dans le langage lui-même. Chaque version du compilateur bootstrap est compilée avec une version qui l’a précédée, mais sa première version doit être compilée par un compilateur écrit dans un autre langage, comme la première version de Roslyn compilée par un compilateur écrit en C++. De nombreux langages de programmation mûrissent et écrivent leurs propres compilateurs en utilisant le langage lui-même, tels que C# et Go.
Sur la plateforme .NET, le compilateur Roslyn est responsable de la compilation du code C# et VB en assemblies.
La plupart des compilateurs traditionnels existants sont des modèles « boîte noire » qui convertissent le code source en exécutables ou fichiers bibliothèque, et nous n’avons aucun moyen de savoir ce qui se passe entre les deux. Contrairement à Roslyn, Roslyn vous permet d’accéder à chaque étape du processus de compilation de code via des API.
Son mécanisme de fonctionnement est basé sur un pipeline, avec quatre étapes, chacune étant un module indépendant, et chaque module fournit une API correspondante. Les environnements de développement intégrés (IDE) peuvent exploiter ces API pour fournir des outils pratiques améliorant l’efficacité du développement, tels que la surlignée de code, des indices intelligents, des outils de refactorisation, des outils d’analyse de performance, et plus encore. De plus, avec Roslyn, les développeurs peuvent utiliser le compilateur comme un service dans leurs propres programmes.
Exploitez les API fournies par Roslyn pour générer dynamiquement des exemples de code
Tout d’abord, créez une nouvelle bibliothèque ClassLibraryGenerator et créez un projet de bibliothèque standard .NET qui cible le moniker de cadre cible netstandard2.0 (TFM). Ajoutez les packages NuGet Microsoft.CodeAnalysis.Analyzers et Microsoft.CodeAnalysis.CSharp, csproj est configuré comme suit :
Créez un nouveau fichier C# appelé TestSourceGenerator.cs qui spécifie votre propre générateur source comme suit :
Depuis l’objet contexte, nous pouvons accéder au point d’entrée compilé ou à la méthode principale. Une instance mainMethod est un IMethodSymbol qui représente le symbole d’une méthode ou d’une méthode similaire (y compris les constructeurs, destructeurs, opérateurs ou accèssons attribut/événement). La méthode Microsoft.CodeAnalysis.Compilation.GetEntryPoint retourne l’IMethodSymbol du point d’entrée du programme. D’autres méthodes permettent de trouver n’importe quel symbole de méthode dans votre projet. Dans cet objet, on peut déduire l’espace de noms (s’il existe) et le type qu’il contient. La source dans cet exemple est une chaîne interpolée qui modélie le code source à générer, les lacunes interpolées remplissant l’espace de noms et les informations de type contenues. Ajoutez la source au contexte avec le nom de l’invite. Dans cet exemple, le constructeur crée un nouveau fichier source de compilation qui contient l’implémentation de la méthode partielle dans l’application console. Un générateur de sources peut être écrit pour ajouter n’importe quelle source favorite.
Créez une nouvelle application console ConsoleApp4 (sans instructions de premier niveau) avec le code suivant :
En même temps, ajoutez la référence de projet ClassLibraryGenerator, comme suit :
Essayez de lancer l’application console avec la sortie suivante :
Dans Visual Studio, cliquez sur le projet « Dependencies » - > « Analyzer » - > « ClassLibraryGenerator » - > « ClassLibraryGenerator.TestSourceGenerator », double-cliquez sur le fichier « Program.g.cs » pour voir le code généré, comme suit :
Prompt:Modifier le code du constructeur peut nécessiter un redémarrage de Visual Studio pour le voir。
Adresse GitHub de Roslyn :La connexion hyperlientérée est visible.
Référence:
La connexion hyperlientérée est visible.
La connexion hyperlientérée est visible.
La connexion hyperlientérée est visible. |