Size: a a a

2020 November 22

P

Phantom in .NET Talks
И понял как же дохуя всего я не знаю
источник

IC

Ilya L Che in .NET Talks
Вот тут базовый пример есть.
https://devblogs.microsoft.com/dotnet/introducing-c-source-generators/

Сорс генератор, это 2 метода
void Execute(SourceGeneratorContext context)
void Initialize(InitializationContext context)


И в них все синтаксические деревья и прочее рослиновское представление компилируемого кода.
источник

λР

λетучая Рыба... in .NET Talks
Кстати с сорс генераторами по идее в сисярп можно вкорячить что-то наподобие тайп-провайдеров (ну там навесить куда-нибудь атрибут, вытащить оттуда константу, сходить по урлу, нагенерировать типчиков по выкачанной жисонине, иксимэлине и так далее, сложить в partial class)
источник

IC

Ilya L Che in .NET Talks
Но зато выдают они просто string на сишарпе!! Спасибо!
источник

L

Liza in .NET Talks
Ilya L Che
Я и твит не понимаю. Сорс генератор работают через объект компиляции, который рослин им даёт. То есть предлагается затащить в свой компилятор рослин, подстроить свою модель под модель рослина, отдать ему код на фшарпе, получить сгенерированный код на сишарпе, распарсить его в AST, преобразовать в фшарп, а потом скомпилировать. Я даже не знаю, как на такое предложение реагировать.
Не знаю
источник

IC

Ilya L Che in .NET Talks
λетучая Рыба
Кстати с сорс генераторами по идее в сисярп можно вкорячить что-то наподобие тайп-провайдеров (ну там навесить куда-нибудь атрибут, вытащить оттуда константу, сходить по урлу, нагенерировать типчиков по выкачанной жисонине, иксимэлине и так далее, сложить в partial class)
Ну такое. Тайп-провайдеры были рассчитаны на работу прям при написании кода. А генераторы только при компиляции.
источник

IC

Ilya L Che in .NET Talks
И как я понимаю, этот код сгенерированный cs файлами нигде не остаётся.
источник

λР

λетучая Рыба... in .NET Talks
Ilya L Che
Ну такое. Тайп-провайдеры были рассчитаны на работу прям при написании кода. А генераторы только при компиляции.
Хз в чём разница, они прямо при изменении файлов в студии сейчас и генерируют то что нужно https://twitter.com/worldbeaterdev/status/1325161806789304321
источник

IC

Ilya L Che in .NET Talks
Тогда ок.
источник

λР

λетучая Рыба... in .NET Talks
Никакого доп. кода для этого писать не надо, выглядит как тайп провайдер и на вкус как тайп провайдер. Аналогично оно будет работать тут https://github.com/reactivemarbles/ObservableEventsSourceGenerator — пишешь this. и оно генерирует IObservable обёртки для event
источник

n

nobody in .NET Talks
Phantom
Ну я послушал несколько минут этого .net fest
Это ты еще CLRium не слушал
источник

λР

λетучая Рыба... in .NET Talks
Ilya L Che
Но зато выдают они просто string на сишарпе!! Спасибо!
Скорее всего недопонимание там из-за вот этой истории https://github.com/dotnet/roslyn/blob/master/src/Compilers/Core/Portable/Text/SourceText.cs#L95 Для писателей сорсогенераторов это всё действительно выглядит как генерация обычных строк
источник

P

Phantom in .NET Talks
nobody
Это ты еще CLRium не слушал
Я щяс больше всего напрягаюсь из за построения архитектуры
источник

P

Phantom in .NET Talks
в чем я 0
источник

λР

λетучая Рыба... in .NET Talks
источник

P

Phantom in .NET Talks
в самом шарпе я +- шарю, надо чутка конкурентность подтянуть
источник

P

Phantom in .NET Talks
а вот опыта в написании у меня 0
источник

IC

Ilya L Che in .NET Talks
λетучая Рыба
Скорее всего недопонимание там из-за вот этой истории https://github.com/dotnet/roslyn/blob/master/src/Compilers/Core/Portable/Text/SourceText.cs#L95 Для писателей сорсогенераторов это всё действительно выглядит как генерация обычных строк
Угу.
источник

P

Phantom in .NET Talks
Ну все что есть в гитхабе лежит
источник

λР

λетучая Рыба... in .NET Talks
Ну и вообще и без сорсогенераторов можно было кодогенерировать. Оно, правда, тормозило, но можно было https://github.com/reactiveui/pharmacist
источник