Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 2796|Ответ: 2

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

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

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

Эта статья начинается с компилятора Roslyn. Нам не нужно углубляться в то, как это работает, но нужно понять, как это работает, чтобы понять, для чего это можно использовать.

Изначально компилятор языка C# писался на C++, а позже Microsoft представила новый компилятор, написанный на C#: Roslyn, который является загрузочным компилятором.

Компилятор bootstrap означает, что компилятор определённого языка программирования написан непосредственно на этом языке. Каждая версия загрузочного компилятора компилируется с предыдущей версией, но её первая версия должна быть скомпилирована компилятором, написанным на другом языке, например, первая версия Roslyn, скомпилированная компилятором, написанным на C++. Многие языки программирования развиваются и пишут собственные компиляторы на самом языке, такие как C# и Go.

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

Большинство существующих традиционных компиляторов — это шаблоны «чёрного ящика», которые преобразуют исходный код в исполняемые файлы или библиотечные файлы, и мы не можем знать, что происходит между ними. В отличие от Roslyn, Roslyn позволяет получить доступ ко всем этапам процесса компиляции кода через API.

Её рабочий механизм основан на конвейере, состоит из четырёх этапов, каждый из которых является независимым модулем, и каждый модуль предоставляет соответствующий API. Интегрированные среды разработки (IDE) могут использовать эти API для предоставления удобных инструментов повышения эффективности разработки, таких как выделение кода, умные подсказки, инструменты рефакторинга, анализа производительности и многое другое. Кроме того, с Roslyn разработчики могут использовать компилятор как сервис в своих программах.

Используйте API, предоставляемые Roslyn, для динамической генерации образцов кода

Во-первых, создайте новую библиотеку ClassLibraryGenerator и проект стандартной библиотеки .NET, ориентированный на целевой фреймворк netstandard2.0 (TFM). Добавьте пакеты NuGet Microsoft.CodeAnalysis.Analyzers и Microsoft.CodeAnalysis.CSharp, csproj настроен следующим образом:


Создайте новый C#-файл под названием TestSourceGenerator.cs, который указывает ваш собственный генератор исходного кода следующим образом:

Из объекта context мы можем получить доступ к скомпилированной точке входа или к основному методу. Экземпляр 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
 Хозяин| Опубликовано 06.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