Kompilátor: Kompilátor je program, který převádí zdrojový kód (původní jazyk) napsaný v jednom programovacím jazyce do jiného (cílového jazyka). Kompilace je proces překladu ze zdrojového kódu (obvykle vysokoúrovňového jazyka) do objektového kódu (obvykle nízkoúrovňového jazyka nebo strojového jazyka), který může být vykonán přímo počítačem nebo virtuálním strojem.
V platformě .NET existují dva různé kompilátory v různých fázích spouštění modelu: jeden se nazývá Roslyn kompilátor, který kompiluje kód C# a VB do assemblerů; Druhý se nazývá RyuJIT kompilátor, který kompiluje kód IL (mezijazyk) v assembleru do strojového kódu.
Tento článek začíná překladatelem Roslyn. Nemusíme se pouštět do toho, jak funguje, ale abychom pochopili, jak funguje, abychom věděli, k čemu se dá použít.
Zpočátku byl překladač jazyka C# napsán v C++, později Microsoft představil nový kompilátor napsaný přímo v C#: Roslyn, což je bootstrapový kompilátor.
Bootstrapový kompilátor znamená, že kompilátor určitého programovacího jazyka je napsán přímo v tomto jazyce. Každá verze bootstrapového kompilátoru je kompilována s verzí, která jí předcházela, ale její první verze musí být zkompilována kompilátorem napsaným v jiném jazyce, například první verzí Roslyn kompilovanou kompilátorem napsaným v C++. Mnoho programovacích jazyků dozrává a píše vlastní kompilátory přímo v tomto jazyce, například C# a Go.
Na platformě .NET je kompilátor Roslyn zodpovědný za kompilaci kódu C# a VB do assemblerů.
Většina existujících tradičních kompilátorů jsou "černé skříňky" vzory, které převádějí zdrojový kód na spustitelné soubory nebo knihovnické soubory, a nemáme žádný způsob, jak zjistit, co se mezi tím děje. Na rozdíl od Roslyn vám Roslyn umožňuje přístup ke všem fázím procesu kompilace kódu prostřednictvím API.
Jeho funkční mechanismus je založen na pipeline, se čtyřmi fázemi, z nichž každá je samostatný modul, a každý modul poskytuje odpovídající API. Integrovaná vývojová prostředí (IDE) mohou tato API využívat k poskytování pohodlných nástrojů ke zvýšení efektivity vývoje, jako je zvýrazňování kódu, chytré nápovědy, nástroje pro refaktoring, nástroje pro analýzu výkonu a další. Navíc u Roslyn mohou vývojáři používat kompilátor jako službu ve svých vlastních programech.
Využijte API poskytovaná Roslyn k dynamickému generování vzorků kódu
Nejprve vytvořte novou knihovnu ClassLibraryGenerator a vytvořte projekt pro .NET standard, který cílí na cílový rámec netstandard2.0 (TFM). Přidejte balíčky NuGet Microsoft.CodeAnalysis.Analyzers a Microsoft.CodeAnalysis.CSharp a csproj je nakonfigurován následovně:
Vytvořte nový soubor v C# nazvaný TestSourceGenerator.cs, který specifikuje váš vlastní generátor zdrojů následovně:
Z kontextového objektu můžeme přistupovat ke zkompilovanému vstupnímu bodu nebo k hlavní metodě. Instance mainMethod je IMethodSymbol, který reprezentuje symbol metody nebo podobné metody (včetně konstruktorů, destrokerů, operátorů nebo atributů/událostí). Metoda Microsoft.CodeAnalysis.Compilation.GetEntryPoint vrací IMethodSymbol vstupního bodu programu. Jiné metody vám umožní najít jakýkoli symbol metody ve vašem projektu. V tomto objektu můžeme odvodit jmenný prostor (pokud existuje) a typ, který obsahuje. Zdroj v tomto příkladu je interpolovaný řetězec, který šablonuje zdrojový kód určený k generování, přičemž interpolované mezery vyplňují obsahovaný jmenný prostor a informace o typu. Přidejte zdroj do kontextu s názvem promptu. Pro tento příklad tvůrce vytváří nový build source soubor, který obsahuje implementaci částečné metody v konzolové aplikaci. Generátor zdrojů lze napsat, který přidá libovolný oblíbený zdroj.
Vytvořte novou konzolovou aplikaci ConsoleApp4 (bez příkazů na nejvyšší úrovni) s následujícím kódem:
Současně přidejte odkaz na projekt ClassLibraryGenerator, a to následovně:
Zkuste spustit konzolovou aplikaci s výstupem takto:
Ve Visual Studiu klikněte na projekt "Dependencies" – > "Analyzer" – > "ClassLibraryGenerator" > "ClassLibraryGenerator.TestSourceGenerator", dvakrát klikněte na soubor "Program.g.cs" a zobrazí se vygenerovaný kód, a to následovně:
Pobídnout:Úprava kódu tvůrce může vyžadovat restart Visual Studia, abyste ho viděli。
Adresa Roslyn na GitHubu:Přihlášení k hypertextovému odkazu je viditelné.
Odkaz:
Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné. |