Исходный код вики Генерация кода

Редактировал(а) Alexandr Fokin 2023/08/06 16:33

Скрыть последних авторов
Alexandr Fokin 2.6 1 |(% style="width:108px" %) |(% style="width:1376px" %)Генерация кода, SourceGenerators, Source generators, SourceGenerator, SourceGenerator
Alexandr Fokin 2.7 2 |(% style="width:108px" %) |(% style="width:1376px" %)[[Roslyn>>doc:Разработка.NET.Работа со сборками и исходниками.Roslyn.WebHome]]
Alexandr Fokin 2.6 3 |(% style="width:108px" %)Описания|(% style="width:1376px" %)(((
4 * Позволяет использовать преимущества динамического формирования кода (схожего с [[Reflection | Рефлексия>>doc:Разработка.NET.C#.Рантайм и типы.Reflection | Рефлексия .WebHome]]), при том что сам этап генерации происходит в момент сборки приложения.
5 * Позволяет увидеть динамический (сгенерированный) код.
6 * Позволяет выполнить проверки типов на этапе компиляции для генерируемого кода (что не возможно при других подходах).
Alexandr Fokin 2.7 7 * Производительность кода равна коду, написанному вручную (т.к. генерация идет в момент сборки, а не в рантайме).
Alexandr Fokin 2.6 8 )))
Alexandr Fokin 2.7 9 |(% style="width:108px" %)Минусы|(% style="width:1376px" %)(((
Alexandr Fokin 2.8 10 * Некоторые моменты инструмента еще сырые (Например поддержка на уровне IDE).
Alexandr Fokin 2.7 11 * Некоторая сложность тестирования.
12 * Написание и хранения блоков кода в виде строк может быть не очень удобной.
13 * Сложность разработки и быстрого изменения выше, чем при использовании рефлексии.
14 (В том числе необходимость учитывать разные варианты объявления элементов кода).
15 )))
Alexandr Fokin 2.6 16 |(% style="width:108px" %)Материалы|(% style="width:1376px" %)(((
17 |Олег Сафонов — Пишем код, когда пишем код: source generator'ы
18 [[https:~~/~~/www.youtube.com/watch?v=wtGTxRDSQz4>>https://www.youtube.com/watch?v=wtGTxRDSQz4]]
19 |Роман Щербаков «C# 9.0 Source Generators»
Alexandr Fokin 2.1 20 https://www.youtube.com/watch?v=Xeuewv-5nOA
Alexandr Fokin 2.6 21 )))
Alexandr Fokin 2.4 22
23 ----
24
25 ==== Внутренние ссылки: ====
26
27 ====== Дочерние страницы: ======
28
29 {{children/}}
30
31 ====== Обратные ссылки: ======
32
33 {{velocity}}
34 #set ($links = $doc.getBacklinks())
35 #if ($links.size() > 0)
36 #foreach ($docname in $links)
37 #set ($rdoc = $xwiki.getDocument($docname).getTranslatedDocument())
38 * [[$escapetool.xml($rdoc.fullName)]]
39 #end
40 #else
41 No back links for this page!
42 #end
43 {{/velocity}}
44
45 ----