Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 2796|Відповідь: 2

[Джерело] .NET/C# Платформа компілятора Roslyn

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

У платформі .NET існують два різні компілятори на різних етапах виконання моделі: один називається компілятором Roslyn, який компілює код C# і VB у асемблеї; Інший називається компілятором RyuJIT, який компілює код IL (проміжна мова) у асемблері у машинний код.

Ця стаття починається з компілятора Roslyn. Нам не потрібно заглиблюватися в те, як це працює, але щоб зрозуміти, як це працює, щоб знати, для чого це можна використовувати.

Спочатку компілятор мови C# писався на C++, а пізніше Microsoft представила новий компілятор, написаний безпосередньо на C#: Roslyn, який є компілятором 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
 Орендодавець| Опубліковано 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