Kompilator: En kompilator er et program som konverterer kildekode (originalspråk) skrevet i ett programmeringsspråk til et annet (målspråk). Kompilering er prosessen med å oversette fra kildekode (vanligvis et høynivåspråk) til objektkode (vanligvis et lavnivåspråk eller maskinspråk) som kan utføres direkte av en datamaskin eller virtuell maskin.
På .NET-plattformen finnes det to forskjellige kompilatorer på ulike stadier av modellen: en kalt Roslyn-kompilatoren, som kompilerer C#- og VB-kode til assemblies; Den andre kalles RyuJIT-kompilatoren, som kompilerer IL-koden (mellomliggende språk) i assembleren til maskinkode.
Denne artikkelen starter med Roslyn-kompilatoren. Vi trenger ikke å gå i dybden på hvordan det fungerer, men å forstå hvordan det fungerer, for å vite hva det kan brukes til.
Opprinnelig ble kompilatoren til C#-språket skrevet i C++, og senere introduserte Microsoft en ny kompilator skrevet i C# selv: Roslyn, som er en bootstrap-kompilator.
Bootstrap-kompilatoren betyr at kompilatoren til et bestemt programmeringsspråk er skrevet i selve språket. Hver versjon av bootstrap-kompilatoren kompileres med en versjon som kom før, men den første versjonen må kompileres av en kompilator skrevet i et annet språk, slik som Roslyns første versjon kompilert av en kompilator skrevet i C++. Mange programmeringsspråk modnes og skriver sine egne kompilatorer ved å bruke språket selv, som C# og Go.
På .NET-plattformen er Roslyn-kompilatoren ansvarlig for å kompilere C#- og VB-kode til assemblies.
De fleste eksisterende tradisjonelle kompilatorer er "black box"-mønstre som konverterer kildekode til kjørbare filer eller bibliotekfiler, og vi har ingen måte å vite hva som skjer imellom. I motsetning til Roslyn lar Roslyn deg få tilgang til hvert trinn i kodekompilasjonsprosessen via API-er.
Dens arbeidsmekanisme er pipeline-basert, med fire trinn, hvor hvert trinn er en uavhengig modul, og hver modul gir et tilsvarende API. Integrerte utviklingsmiljøer (IDE-er) kan utnytte disse API-ene for å tilby praktiske verktøy som forbedrer utviklingseffektiviteten, som kodemarkering, smarte hint, refaktoreringsverktøy, ytelsesanalyseverktøy og mer. I tillegg kan utviklere med Roslyn bruke kompilatoren som en tjeneste i sine egne programmer.
Utnytt API-ene som Roslyn tilbyr for å generere kodeeksempler dynamisk
Først, opprett et nytt ClassLibraryGenerator-bibliotek og lag et .NET-standardbibliotekprosjekt som retter seg mot netstandard2.0-målrammeverket (TFM). Legg til NuGet-pakkene Microsoft.CodeAnalysis.Analyzers og Microsoft.CodeAnalysis.CSharp, csproj er konfigurert som følger:
Lag en ny C#-fil kalt TestSourceGenerator.cs som spesifiserer din egen kildegenerator som følger:
Fra kontekstobjektet kan vi få tilgang til det kompilerte inngangspunktet eller hovedmetoden. En mainMethod-instans er et IMethodSymbol som representerer symbolet til en metode eller lignende metode (inkludert konstruktører, destruktorer, operatorer eller attributt-/hendelsesaccessorer). Microsoft.CodeAnalysis.Compilation.GetEntryPoint-metoden returnerer IMethodSymbol til programmets inngangspunkt. Andre metoder lar deg finne hvilket som helst metodesymbol i prosjektet ditt. I dette objektet kan vi utlede navnerommet (hvis det eksisterer) og typen det inneholder. Kilden i dette eksempelet er en interpolert streng som maler kildekoden som skal genereres, med de interpolerte hullene som fyller det inneholdte navnerommet og typeinformasjonen. Legg kilde til kontekst med prompt-navnet. For dette eksempelet oppretter byggeren en ny byggekildefil som inneholder implementeringen av den delvise metoden i konsollapplikasjonen. En kildegenerator kan skrives for å legge til hvilken som helst favorittkilde.
Lag en ny ConsoleApp4-konsollapp (uten toppnivåsetninger) med følgende kode:
Samtidig legg til ClassLibraryGenerator-prosjektreferansen, som følger:
Prøv å starte konsollappen med utgangen som følger:
I Visual Studio, klikk på prosjektet "Dependencies" - > "Analyzer" - > "ClassLibraryGenerator" - > "ClassLibraryGenerator.TestSourceGenerator", dobbeltklikk på "Program.g.cs"-filen for å se den genererte koden, som følger:
Omgående:Å endre byggerkoden kan kreve en omstart av Visual Studio for å se den。
Roslyn GitHub-adresse:Innloggingen med hyperkoblingen er synlig.
Referanse:
Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig. |