Kompilátor: Kompilátor je program, ktorý konvertuje zdrojový kód (pôvodný jazyk) napísaný v jednom programovacom jazyku do iného (cieľového jazyka). Kompilácia je proces prekladu zo zdrojového kódu (zvyčajne vysokoúrovňového jazyka) do objektového kódu (zvyčajne nízkoúrovňového jazyka alebo strojového jazyka), ktorý môže byť priamo vykonaný počítačom alebo virtuálnym strojom.
V .NET platforme existujú dva rôzne kompilátory v rôznych fázach vykonávania modelu: jeden nazývaný Roslyn kompilátor, ktorý kompiluje kód C# a VB do assemblerov; Druhý sa nazýva RyuJIT kompilátor, ktorý kompiluje IL (medzijazykový kód) v assembleri do strojového kódu.
Tento článok začína Roslyn kompilátorom. Nemusíme sa púšťať do toho, ako funguje, ale aby sme pochopili, ako funguje, aby sme vedeli, na čo sa dá použiť.
Spočiatku bol kompilátor jazyka C# napísaný v C++, neskôr Microsoft predstavil nový kompilátor napísaný priamo v C#: Roslyn, čo je bootstrapový kompilátor.
Bootstrap kompilátor znamená, že kompilátor určitého programovacieho jazyka je napísaný priamo v danom jazyku. Každá verzia bootstrap kompilátora sa kompiluje s predchádzajúcou verziou, ale jej prvá verzia musí byť skompilovaná kompilátorom napísaným v inom jazyku, napríklad prvá verzia Roslynu kompilovaná kompilátorom napísaným v C++. Mnohé programovacie jazyky dozrievajú a píšu vlastné kompilátory pomocou samotného jazyka, napríklad C# a Go.
Na platforme .NET je kompilátor Roslyn zodpovedný za kompiláciu kódu C# a VB do assemblerov.
Väčšina existujúcich tradičných kompilátorov sú "čierne skrinky", ktoré prevádzajú zdrojový kód na spustiteľné súbory alebo knižničné súbory, a nemáme spôsob, ako zistiť, čo sa medzi tým deje. Na rozdiel od Roslyn vám Roslyn umožňuje prístup ku každej fáze procesu kompilácie kódu prostredníctvom API.
Jeho funkčný mechanizmus je založený na pipeline, so štyrmi fázami, z ktorých každý je samostatný modul, pričom každý modul poskytuje zodpovedajúce API. Integrované vývojové prostredia (IDE) môžu tieto API využívať na poskytovanie pohodlných nástrojov na zvýšenie efektivity vývoja, ako je zvýrazňovanie kódu, inteligentné tipy, nástroje na refaktorovanie, nástroje na analýzu výkonu a ďalšie. Okrem toho môžu vývojári s Roslynom používať kompilátor ako službu vo vlastných programoch.
Využite API poskytované spoločnosťou Roslyn na dynamické generovanie ukážok kódu
Najprv vytvorte novú knižnicu ClassLibraryGenerator a vytvorte projekt .NET štandardnej knižnice, ktorý cieli na meno netstandard2.0 target framework (TFM). Ak pridáte balíky NuGet Microsoft.CodeAnalysis.Analyzers a Microsoft.CodeAnalysis.CSharp, csproj je nakonfigurovaný nasledovne:
Vytvorte nový C# súbor s názvom TestSourceGenerator.cs, ktorý špecifikuje váš vlastný zdrojový generátor nasledovne:
Z kontextového objektu môžeme pristupovať k skompilovanému vstupnému bodu alebo k hlavnej metóde. Inštancia mainMethod je IMethodSymbol, ktorý reprezentuje symbol metódy alebo podobnej metódy (vrátane konštruktorov, deštruktorov, operátorov alebo pridružených atribútov/udalostí). Metóda Microsoft.CodeAnalysis.Compilation.GetEntryPoint vráti IMethodSymbol vstupného bodu programu. Iné metódy vám umožnia nájsť akýkoľvek symbol metódy vo vašom projekte. V tomto objekte môžeme odvodiť menný priestor (ak existuje) a typ, ktorý obsahuje. Zdrojom v tomto príklade je interpolovaný reťazec, ktorý šablónuje zdrojový kód na generovanie, pričom interpolované medzery zapĺňajú obsahovaný menný priestor a informácie o typoch. Pridajte zdroj do kontextu s názvom promptu. Pre tento príklad tvorca vytvorí nový zdrojový súbor zostavenia, ktorý obsahuje implementáciu čiastočnej metódy v konzolovej aplikácii. Generátor zdrojov môže byť napísaný tak, aby pridal akýkoľvek obľúbený zdroj.
Vytvorte novú konzolovú aplikáciu ConsoleApp4 (bez príkazov na najvyššej úrovni) s nasledujúcim kódom:
Zároveň pridajte referenciu projektu ClassLibraryGenerator, nasledovne:
Skúste spustiť konzolovú aplikáciu s výstupom nasledovne:
Vo Visual Studio kliknite na projekt "Dependencies" - > "Analyzer" - > "ClassLibraryGenerator" > "ClassLibraryGenerator.TestSourceGenerator", dvojitým kliknutím na súbor "Program.g.cs" si pozrite vygenerovaný kód, nasledovne:
Okamžitý:Úprava staviteľského kódu môže vyžadovať reštart Visual Studia, aby ste ho videli。
Roslyn GitHub adresa:Prihlásenie na hypertextový odkaz je viditeľné.
Referencia:
Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné. |