Kompilaator: Kompilaator on programm, mis teisendab ühes programmeerimiskeeles kirjutatud lähtekoodi (originaalkeel) teiseks (sihtkeeleks). Kompileerimine on protsess, mille käigus tõlkitakse lähtekoodist (tavaliselt kõrgetasemeline keel) objektkoodi (tavaliselt madalama taseme keel või masinkeel), mida saab otse arvuti või virtuaalmasina poolt käivitada.
.NET platvormil on kaks erinevat kompilaatorit, mis on mudeli täitmise erinevates etappides: üks nimega Roslyn kompilaator, mis kompileerib C# ja VB koodi assembleriteks; Teine on RyuJIT kompilaator, mis kompileerib assembleris oleva IL (vahekeele) koodi masinkoodiks.
See artikkel algab Roslyni kompilaatoriga. Me ei pea süvitsi minema, kuidas see töötab, vaid et mõista, kuidas see toimib, teadma, milleks seda kasutada saab.
Alguses kirjutati C# keele kompilaator C++ keeles ning hiljem tutvustas Microsoft uut kompilaatorit, mis oli kirjutatud C# keeles: Roslyn, mis on bootstrap-kompilaator.
Bootstrap-kompilaator tähendab, et teatud programmeerimiskeele kompilaator on kirjutatud just selles keeles. Iga bootstrap-kompilaatori versioon kompileeritakse eelneva versiooniga, kuid esimene versioon peab olema kompileeritud teises keeles kirjutatud kompilaatoriga, näiteks Roslyni esimene versioon, mis on kompileeritud C++ keeles kirjutatud kompilaatoriga. Paljud programmeerimiskeeled küpsevad ja kirjutavad oma kompilaatorid, kasutades keelt ennast, näiteks C# ja Go.
.NET platvormil vastutab Roslyni kompilaator C# ja VB koodi kompileerimise eest assembleriteks.
Enamik olemasolevaid traditsioonilisi kompilaatoreid on "musta kasti" mustrid, mis teisendavad lähtekoodi täidetavateks failideks või teegifailideks, ja meil puudub võimalus teada, mis vahepeal toimub. Erinevalt Roslynist võimaldab Roslyn sul ligi pääseda igale koodikompileerimise etapile API-de kaudu.
Selle töömehhanism põhineb torujuhtmel, koosneb neljast etapist, millest igaüks on iseseisev moodul ning iga moodul pakub vastavat API-d. Integreeritud arenduskeskkonnad (IDE-d) saavad neid API-sid kasutada, et pakkuda mugavaid tööriistu arenduse tõhususe parandamiseks, nagu koodi esiletõstmine, nutikad vihjed, refaktoreerimise tööriistad, jõudlusanalüüsi tööriistad ja palju muud. Lisaks saavad arendajad Roslyni abil kasutada kompilaatorit teenusena oma programmides.
Kasuta Roslyni poolt pakutavaid API-sid, et dünaamiliselt genereerida koodinäidiseid
Esiteks loo uus ClassLibraryGeneratori teek ja loo .NET standardteegi projekt, mis on suunatud netstandard2.0 sihtraamistiku nimetusele (TFM). Lisa NuGet paketid Microsoft.CodeAnalysis.Analyzers ja Microsoft.CodeAnalysis.CSharp, csproj on seadistatud järgmiselt:
Loo uus C# fail nimega TestSourceGenerator.cs, mis määrab oma lähtegeneraatori järgmiselt:
Kontekstiobjektist pääseme ligi kompileeritud sisestuspunktile või peamisele meetodile. mainMethod eksemplar on IMethodSymbol, mis esindab meetodi või sarnase meetodi sümbolit (sh konstruktorid, hävitajad, operaatorid või atribuudide/sündmuste lisajad). Microsoft.CodeAnalysis.Compilation.GetEntryPoint meetod tagastab programmi sisenemispunkti IMethodSymboli. Teised meetodid võimaldavad sul leida ükskõik millise meetodisümboli oma projektis. Selles objektis saame tuletada nimeruumi (kui see eksisteerib) ja selle tüübi. Selle näite allikaks on interpoleeritud string, mis mallindab genereeritava lähtekoodi, kus interpoleeritud lüngad täidavad sisaldatud nimeruumi ja tüübiinfot. Lisa allikas konteksti koos prompti nimega. Selle näite jaoks loob ehitaja uue ehituslähtefaili, mis sisaldab osalise meetodi rakenduse rakenduse rakendust. Lähtegeneraatori saab kirjutada mistahes lemmikallika lisamiseks.
Loo uus ConsoleApp4 konsoolirakendus (ilma tipptaseme avaldusteta) järgmise koodiga:
Samal ajal lisa ClassLibraryGenerator projekti viide järgmiselt:
Proovi käivitada konsoolirakendus väljundiga järgmiselt:
Visual Studios klõpsa projektil "Dependencies" - > "Analyzer" - > "ClassLibraryGenerator" - > "ClassLibraryGenerator.TestSourceGenerator", topeltklõpsa "Program.g.cs" failil, et näha genereeritud koodi, järgmiselt:
Kiire:Ehitaja koodi muutmine võib nõuda Visual Studio taaskäivitamist, et seda näha。
Roslyn GitHubi aadress:Hüperlingi sisselogimine on nähtav.
Viide:
Hüperlingi sisselogimine on nähtav.
Hüperlingi sisselogimine on nähtav.
Hüperlingi sisselogimine on nähtav. |