Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 2796|Atsakyti: 2

[Šaltinis] .NET/C# Roslyn kompiliatoriaus platforma

[Kopijuoti nuorodą]
Paskelbta 2024-03-10 10:58:32 | | | |
Kompiliatorius: Kompiliatorius yra programa, kuri konvertuoja šaltinio kodą (originalo kalbą), parašytą viena programavimo kalba, į kitą (tikslinę kalbą). Kompiliavimas yra vertimo iš šaltinio kodo (dažniausiai aukšto lygio kalbos) į objekto kodą (paprastai žemo lygio kalbą arba mašinų kalbą) procesas, kurį gali tiesiogiai vykdyti kompiuteris arba virtuali mašina.

.NET platformoje yra du skirtingi kompiliatoriai skirtinguose modelio vykdymo etapuose: vienas, vadinamas Roslyn kompiliatoriumi, kuris kompiliuoja C# ir VB kodą į rinkinius; Kitas vadinamas RyuJIT kompiliatoriumi, kuris sukompiliuoja IL (tarpinės kalbos) kodą asamblėjoje į mašininį kodą.

Šis straipsnis prasideda nuo Roslyn kompiliatoriaus. Mums nereikia gilintis į tai, kaip jis veikia, bet suprasti, kaip jis veikia, žinoti, kam jis gali būti naudojamas.

Iš pradžių C# kalbos kompiliatorius buvo parašytas C++, o vėliau "Microsoft" pristatė naują kompiliatorių, parašytą pačiame C#: Roslyn, kuris yra bootstrap kompiliatorius.

"Bootstrap" kompiliatorius reiškia, kad tam tikros programavimo kalbos kompiliatorius yra parašytas pačia kalba. Kiekviena bootstrap kompiliatoriaus versija yra kompiliuojama su ankstesne versija, tačiau pirmąją jos versiją turi kompiliuoti kompiliatorius, parašytas kita kalba, pvz., Roslyn pirmoji versija, kurią sudarė kompiliatorius, parašytas C++. Daugelis programavimo kalbų subręsta ir rašo savo kompiliatorius naudodami pačią kalbą, pvz., C# ir Go.

.NET platformoje Roslyn kompiliatorius yra atsakingas už C# ir VB kodo kompiliavimą į rinkinius.

Dauguma esamų tradicinių kompiliatorių yra "juodosios dėžės" modeliai, kurie konvertuoja šaltinio kodą į vykdomuosius failus ar bibliotekos failus, ir mes neturime galimybės žinoti, kas vyksta tarp jų. Skirtingai nuo Roslyn, Roslyn leidžia pasiekti kiekvieną kodo kompiliavimo proceso etapą per API.

Jo darbo mechanizmas yra pagrįstas vamzdynu, sudarytas iš keturių etapų, kurių kiekvienas yra nepriklausomas modulis, ir kiekvienas modulis teikia atitinkamą API. Integruotos kūrimo aplinkos (IDE) gali panaudoti šias API, kad suteiktų patogius įrankius kūrimo efektyvumui pagerinti, pvz., kodo paryškinimą, išmaniąsias užuominas, pertvarkymo įrankius, našumo analizės įrankius ir kt. Be to, naudodami "Roslyn", kūrėjai gali naudoti kompiliatorių kaip paslaugą savo programose.

Pasinaudokite "Roslyn" teikiamomis API, kad dinamiškai generuotumėte kodo pavyzdžius

Pirmiausia sukurkite naują "ClassLibraryGenerator" biblioteką ir sukurkite .NET standartinės bibliotekos projektą, skirtą netstandard2.0 tikslinės sistemos monikeriui (TFM). Pridėkite NuGet paketus Microsoft.CodeAnalysis.Analyzers ir Microsoft.CodeAnalysis.CSharp, csproj sukonfigūruotas taip:


Sukurkite naują C# failą pavadinimu TestSourceGenerator.cs, kuriame nurodomas jūsų šaltinio generatorius taip:

Iš konteksto objekto galime pasiekti sukompiliuotą įėjimo tašką arba pagrindinį metodą. MainMethod egzempliorius yra IMethodSymbol, nurodantis metodo ar panašaus metodo (įskaitant konstruktorius, destruktorius, operatorius arba atributų / įvykių prietaisus) simbolį. Metodas Microsoft.CodeAnalysis.Compilation.GetEntryPoint grąžina programos įvesties taško IMethodSymbol. Kiti metodai leidžia projekte rasti bet kokį metodo simbolį. Šiame objekte galime išvesti vardų sritį (jei ji yra) ir joje esantį tipą. Šiame pavyzdyje šaltinis yra interpoliuota eilutė, kuri šablonuoja generuojamą šaltinio kodą, o interpoliuotos spragos užpildo esančią vardų sritį ir tipo informaciją. Pridėkite šaltinį prie konteksto naudodami raginimo pavadinimą. Šiame pavyzdyje kūrėjas sukuria naują kūrimo šaltinio failą, kuriame yra dalinio metodo įgyvendinimas konsolės programoje. Šaltinio generatorius gali būti parašytas, kad būtų galima pridėti bet kurį mėgstamą šaltinį.

Sukurkite naują "ConsoleApp4" konsolės programą (be aukščiausio lygio pareiškimų) naudodami šį kodą:

Tuo pačiu metu pridėkite "ClassLibraryGenerator" projekto nuorodą taip:

Pabandykite paleisti konsolės programą su išvestimi taip:



"Visual Studio" spustelėkite projektą "Priklausomybės" - > "Analizatorius" - > "ClassLibraryGenerator" - > "ClassLibraryGenerator.TestSourceGenerator", dukart spustelėkite failą "Program.g.cs", kad pamatytumėte sugeneruotą kodą, kaip nurodyta toliau:



Raginimas:Norint pakeisti kūrėjo kodą, gali reikėti iš naujo paleisti "Visual Studio", kad jį pamatytumėte

Roslyn GitHub adresas:Hipersaito prisijungimas matomas.

Nuoroda:

Hipersaito prisijungimas matomas.
Hipersaito prisijungimas matomas.
Hipersaito prisijungimas matomas.




Ankstesnis:Kodo vykdymas "Visual Studio" naudojant C# interaktyvų langą
Kitą:"Windows 11" originalaus ISO atvaizdo failo atsisiuntimas
 Savininkas| Paskelbta 2024-03-10 10:59:12 |
Įvadas ir skirtumas tarp JIT ir AOT kompiliavimo .NET
https://www.itsvse.com/thread-10734-1-1.html
 Savininkas| Paskelbta 2024-07-06 16:59:59 |
Naudokite Roslyn dinamiškai kompiliuoti C# kodą ir jį paleisti
https://www.itsvse.com/thread-10786-1-1.html
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com