Fordító: A fordító egy olyan program, amely egy programozási nyelven írt forráskódot (eredeti nyelv) egy másikra (célnyelvre) alakítja át. A fordítás a forráskódból (általában magas szintű nyelvből) objektumkódba (általában alacsony szintű nyelvre vagy gépi nyelvre) fordítási folyamat, amelyet közvetlenül futtathat számítógép vagy virtuális gép.
A .NET platformon két különböző fordító van, amelyek különböző fázisokban dolgoznak a modell végrehajtásának: az egyik, amit Roslyn fordítónak hívnak, amely C# és VB kódot assemblerekre fordít; A másik a RyuJIT fordító, amely az IL (köztes nyelv) kódját gépi kódba fordítja az assembly között.
Ez a cikk a Roslyn fordítóval kezdődik. Nem kell belemerülnünk abba, hogyan működik, hanem hogy megértsük, hogyan működik, és tudni, mire lehet használni.
Kezdetben a C# nyelv fordítója C++-ban íródott, majd később a Microsoft bevezetett egy új fordítót, amely magával a C#-val íródott: a Roslyn, amely egy bootstrap fordító.
A bootstrap fordító azt jelenti, hogy egy adott programozási nyelv fordítója magában a nyelven van írva. A bootstrap fordító minden verziója egy előtte lévő verzióval van fordítva, de az első verziót egy másik nyelven írt fordítóval kell fordítani, például Roslyn első verzióját egy C++ nyelven írt fordítóval. Sok programozási nyelv érett, és saját fordítót ír magával a nyelv felhasználásával, például C# és Go.
A .NET platformon a Roslyn fordító felelős a C# és VB kód összeállításokba fordításáért.
A legtöbb hagyományos fordító "fekete doboz" mintázat, amely a forráskódot futtatható fájlokká vagy könyvtári fájlokká alakítja, és nincs módunk tudni, mi történik közöttük. A Roslynnal ellentétben a Roslyn lehetővé teszi, hogy API-kon keresztül hozzáférj a kódfordítási folyamat minden szakaszához.
Működési mechanizmusa csővezeték-alapú, négy szakaszból áll, mindegyik független modul, és minden modul megfelelő API-t biztosít. Az integrált fejlesztői környezetek (IDE-k) ezeket az API-kat kihasználhatják, hogy kényelmes eszközöket nyújtsanak a fejlesztés hatékonyságának javítására, mint például kódkiemelés, okos tippek, refaktoráló eszközök, teljesítményelemző eszközök és még sok más. Ezen felül a Roslyn segítségével a fejlesztők a fordítót saját programjaikban is szolgáltatásként használhatják.
Használja ki a Roslyn által biztosított API-kat dinamikusan generálni a kódmintákat
Először hozz létre egy új ClassLibraryGenerator könyvtárat, és készíts egy .NET szabványos könyvtári projektet, amely a netstandard2.0 célkeret (TFM) nevet célozza meg. Add hozzá a NuGet Microsoft.CodeAnalysis.Analyzers és Microsoft.CodeAnalysis.CSharp csomagokat, így a csproj a következőképpen van konfigurálva:
Hozz létre egy új C# fájlt TestSourceGenerator.cs néven, amely a saját forrásgenerátort az alábbiak szerint határozza meg:
A kontextus objektumból hozzáférhetünk a lefordított belépőponthoz vagy a Fő metódushoz. A mainMethod példány egy IMethodSymbol, amely egy metódus vagy hasonló metódus szimbólumát jelöli (beleértve a konstruktorokat, rombolókat, operátorokat vagy attribútum/esemény hozzáférést). A Microsoft.CodeAnalysis.Compilation.GetEntryPoint metódus a program belépési pontjának IMethodSymbolját adja vissza. Más módszerek lehetővé teszik, hogy bármilyen módszerszimbólumot megtalálj a projektedben. Ebben az objektumban levezethetjük a névteret (ha létezik) és az általa található típust. A példa forrása egy interpolált string, amely sablonozza a generálandó forráskódot, az interpolált résekből pedig a megadott névtér és típus információ található. Add hozzá forrást a kontextushoz a prompt névvel. Ebben a példában a fejlesztő létrehoz egy új build forrásfájlt, amely tartalmazza a részleges metódus implementációját a konzol alkalmazásban. Egy forrásgenerátor írható, hogy bármilyen kedvenc forrást hozzáadjon.
Hozz létre egy új ConsoleApp4 konzolalkalmazást (felső szintű utasítások nélkül) a következő kóddal:
Ugyanakkor adjuk hozzá a ClassLibraryGenerator projekthivatkozást az alábbiak szerint:
Próbáld meg elindítani a konzolos alkalmazást a következő kimenettel:
A Visual Studio-ban kattintson a "Dependencies" - > "Analyzer" - > "ClassLibraryGenerator" - > "ClassLibraryGenerator.TestSourceGenerator" projektre, és kattintson a "Program.g.cs" fájlra, hogy lássa a generált kódot, az alábbiak szerint:
Haladéktalan:A fejlesztő kódjának módosításához a Visual Studio újraindítása szükséges lehet ahhoz, hogy lássuk。
Roslyn GitHub cím:A hiperlink bejelentkezés látható.
Utalás:
A hiperlink bejelentkezés látható.
A hiperlink bejelentkezés látható.
A hiperlink bejelentkezés látható. |