Compiler: En compiler er et program, der konverterer kildekode (originalsprog) skrevet i ét programmeringssprog til et andet (målsprog). Kompilering er processen med at oversætte fra kildekode (normalt et højniveausprog) til objektkode (normalt et lavniveausprog eller maskinsprog), som kan udføres direkte af en computer eller virtuel maskine.
På .NET-platformen er der to forskellige compilere på forskellige stadier af modellens eksekvering: den ene kaldet Roslyn-compileren, som kompilerer C#- og VB-kode til assemblies; Den anden kaldes RyuJIT-kompilatoren, som kompilerer IL (mellemliggende sprog) koden i assembleren til maskinkode.
Denne artikel starter med Roslyn-kompilatoren. Vi behøver ikke at dykke ned i, hvordan det fungerer, men for at forstå, hvordan det fungerer, for at vide, hvad det kan bruges til.
Oprindeligt var compileren af C#-sproget skrevet i C++, og senere introducerede Microsoft en ny compiler skrevet i C#: Roslyn, som er en bootstrap-compiler.
Bootstrap-kompilatoren betyder, at kompilatoren af et bestemt programmeringssprog er skrevet i selve sproget. Hver version af bootstrap-kompilatoren kompileres med en version, der gik forud, men dens første version skal kompileres af en compiler skrevet i et andet sprog, såsom Roslyns første version, kompileret af en compiler skrevet i C++. Mange programmeringssprog modnes og skriver deres egne compilere ved hjælp af selve sproget, såsom C# og Go.
På .NET-platformen er Roslyn-kompilatoren ansvarlig for at kompilere C#- og VB-kode til assemblies.
De fleste eksisterende traditionelle compilere er "black box"-mønstre, der konverterer kildekode til eksekverbare filer eller biblioteksfiler, og vi har ingen måde at vide, hvad der sker imellem. I modsætning til Roslyn giver Roslyn dig adgang til alle trin i kodekompilationsprocessen via API'er.
Dens arbejdsmekanisme er pipeline-baseret med fire trin, hvor hver er et uafhængigt modul, og hver modul leverer et tilsvarende API. Integrerede udviklingsmiljøer (IDE'er) kan udnytte disse API'er til at tilbyde praktiske værktøjer til at forbedre udviklingseffektiviteten, såsom kodefremhævning, smarte hints, refaktoreringsværktøjer, performanceanalyseværktøjer og mere. Derudover kan udviklere med Roslyn bruge compileren som en service i deres egne programmer.
Udnyt de API'er, som Roslyn leverer, til dynamisk at generere kodeeksempler
Først skal du oprette et nyt ClassLibraryGenerator-bibliotek og oprette et .NET-standardbiblioteksprojekt, der retter sig mod netstandard2.0 target framework-navnet (TFM). Tilføj NuGet-pakkerne Microsoft.CodeAnalysis.Analyzers og Microsoft.CodeAnalysis.CSharp, csproj konfigureres som følger:
Opret en ny C#-fil kaldet TestSourceGenerator.cs, der specificerer din egen kildegenerator som følger:
Fra kontekstobjektet kan vi få adgang til det kompilerede indgangspunkt eller Main-metoden. En mainMethod-instans er en IMethodSymbol, der repræsenterer symbolet for en metode eller lignende metode (inklusive konstruktører, destruktorer, operatorer eller attribut-/begivenhedsaccessorer). Microsoft.CodeAnalysis.Compilation.GetEntryPoint-metoden returnerer IMethodSymbol for programmets indgangspunkt. Andre metoder giver dig mulighed for at finde ethvert metodesymbol i dit projekt. I dette objekt kan vi udlede navnerummet (hvis det eksisterer) og den type, det indeholder. Kilden i dette eksempel er en interpoleret streng, der skabeloner kildekoden, der skal genereres, med de interpolerede huller, der udfylder det indeholdte navnerum og typeinformation. Tilføj kilde til konteksten med promptens navn. I dette eksempel opretter byggeren en ny byggekildefil, der indeholder implementeringen af den delvise metode i konsolapplikationen. En kildegenerator kan skrives til at tilføje enhver favoritkilde.
Opret en ny ConsoleApp4-konsolapp (uden topniveau-sætninger) med følgende kode:
Samtidig tilføjes ClassLibraryGenerator-projektreferencen som følger:
Prøv at starte konsolappen med outputtet som følger:
I Visual Studio klikker du på projektet "Dependencies" - > "Analyzer" - > "ClassLibraryGenerator" - > "ClassLibraryGenerator.TestSourceGenerator", dobbeltklik på filen "Program.g.cs" for at se den genererede kode, som følger:
Lynhurtig:Ændring af builderens kode kan kræve en genstart af Visual Studio for at se den。
Roslyn GitHub-adresse:Hyperlink-login er synlig.
Henvisning:
Hyperlink-login er synlig.
Hyperlink-login er synlig.
Hyperlink-login er synlig. |