Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 2796|Отговор: 2

[Източник] .NET/C# Roslyn компилаторна платформа

[Копирай линк]
Публикувано в 10.03.2024 г. 10:58:32 ч. | | | |
Компилатор: Компилатор е програма, която конвертира изходния код (оригинален език), написан на един програмен език, в друг (целеви език). Компилацията е процесът на превеждане от изходен код (обикновено език на високо ниво) към обектен код (обикновено ниско ниво или машинен език), който може да се изпълнява директно от компютър или виртуална машина.

В .NET платформата има два различни компилатора на различни етапи на изпълнение на модела: единият се нарича компилатор Roslyn, който компилира C# и VB код в асемблии; Другият се нарича RyuJIT компилатор, който компилира IL (междинен език) код в асемблера в машинен код.

Тази статия започва с компилатора на Рослин. Не е нужно да навлизаме в това как работи, а за да разберем как работи, за да знаем за какво може да се използва.

Първоначално компилаторът на езика C# беше написан на C++, а по-късно Microsoft представи нов компилатор, написан на самия C#: Roslyn, който е bootstrap компилатор.

Bootstrap компилаторът означава, че компилаторът на определен програмен език е написан на самия език. Всяка версия на bootstrap компилатора се компилира с версия, която я е предшествала, но първата му версия трябва да бъде компилирана от компилатор, написан на друг език, като например първата версия на Roslyn, компилирана от компилатор, написан на C++. Много програмни езици узряват и пишат свои собствени компилатори, използвайки самия език, като C# и Go.

На платформата .NET компилаторът Roslyn отговаря за компилирането на C# и VB код в асемблии.

Повечето съществуващи традиционни компилатори са "черна кутия" шаблони, които преобразуват изходния код в изпълними файлове или библиотечни файлове, и нямаме начин да знаем какво се случва между тях. За разлика от Roslyn, Roslyn ви позволява достъп до всеки етап от процеса на компилация чрез API-та.

Работният му механизъм е базиран на конвейер, с четири етапа, всеки от които е независим модул, като всеки модул предоставя съответен API. Интегрираните среди за разработка (IDE) могат да използват тези API-та, за да предоставят удобни инструменти за подобряване на ефективността на разработката, като маркиране на код, умни съвети, инструменти за рефакториране, инструменти за анализ на производителността и други. Освен това, с Roslyn, разработчиците могат да използват компилатора като услуга в собствените си програми.

Използвайте API-тата, предоставени от Roslyn, за динамично генериране на кодови проби

Първо, създайте нова библиотека ClassLibraryGenerator и създайте .NET стандартен библиотечен проект, насочен към netstandard2.0 target framework (TFM). Добавете NuGet пакетите Microsoft.CodeAnalysis.Analyzers и Microsoft.CodeAnalysis.CSharp, като csproj е конфигуриран по следния начин:


Създайте нов C# файл, наречен TestSourceGenerator.cs, който определя вашия собствен генератор на източника по следния начин:

От контекстния обект можем да достъпим компилираната входна точка или основния метод. Екземпляр на mainMethod е IMethodSymbol, който представлява символа на метод или подобен метод (включително конструктори, деструктори, оператори или аксесори на атрибути/събития). Методът Microsoft.CodeAnalysis.Compilation.GetEntryPoint връща IMethodSymbol на входната точка на програмата. Други методи ти позволяват да намериш всеки символ на метода в проекта си. В този обект можем да изведем пространството от имена (ако съществува) и типа, който съдържа. Източникът в този пример е интерполиран низ, който шаблонира изходния код за генериране, като интерполираните празнини запълват съдържанието на пространството от имена и информацията за типове. Добавете източник към контекста с името на заявката. За този пример конструкторът създава нов изходен файл за билд, който съдържа реализацията на частичния метод в конзолното приложение. Генератор на източници може да се напише, за да добави всеки любим източник.

Създайте ново конзолно приложение ConsoleApp4 (без горни оператори) със следния код:

В същото време добавете референтния референт на проекта ClassLibraryGenerator, както следва:

Опитайте да стартирате конзолното приложение с изхода по следния начин:



Във Visual Studio кликнете върху проекта "Dependencies" - > "Analyzer" - > "ClassLibraryGenerator" - > "ClassLibraryGenerator.TestSourceGenerator", двойно кликнете върху файла "Program.g.cs", за да видите генерирания код, както следва:



Бърз:Промяната на кода на конструктора може да изисква рестартиране на Visual Studio, за да се види

Адрес на Roslyn в GitHub:Входът към хиперлинк е видим.

Препратка:

Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.




Предишен:Изпълнение на код във Visual Studio чрез интерактивния прозорец на C#
Следващ:Изтегляне на оригиналния ISO файл за Windows 11
 Хазяин| Публикувано в 10.03.2024 г. 10:59:12 ч. |
Въведение и разлика между компилацията на JIT и AOT в .NET
https://www.itsvse.com/thread-10734-1-1.html
 Хазяин| Публикувано в 6.07.2024 г. 16:59:59 ч. |
Използвайте Roslyn за динамично компилиране на C# код и стартиране
https://www.itsvse.com/thread-10786-1-1.html
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com