Программы, которые пишут себя сами | Метапрограммирование в C#/.NET: Начало | Expression Trees
Dev Jungles - Andrii Podkolzin
0:00 / 0:00
Программы, которые пишут себя сами | Метапрограммирование в C#/.NET: Начало | Expression Trees
20 889 просмотров · Трансляция закончилась 4 года назад
Dev Jungles - Andrii Podkolzin
15,4 тыс. подписчиков
20 889 просмотров · Трансляция закончилась 4 года назад
#DevJungles #dotnet #expressions
Если никогда не слышали про Expresion Trees, то зачем они вам могут понадобится:
Строить динамические фильтры на основе данных пользователя
Где-то ускорять рефлексию, если она стала узким местом
Выстраивать потрясающие API, что реализуют Open-Closed принцип из SOLID настолько, насколько это вообще возможно.
Когда программе на вход подают программу и что-то выдают на выход, это называется метапрогрммирование. В целом, иногда даже наоборот: программе скармливают данные, аргументы и параметры и на выход она отдает программу.
Таким образом первой метапрограммой с которой сталкивается любой разраб будет компилятор. Ну или интерпретатор, если вы из Этих. Затем могут следовать различные scaffold программы и простенькие кодогенераторы вроде того что генерирует вам DbContext из БД на удаленном сервере.
C# довольно богат инструментами метапрограммирования. У нас как минимум есть:
Продвинутая рефлексия
Деревья выражений (aka Expression Trees)
Динамическая компиляция
Reflection.Emit
Roslyn Compiler Platform, что открывает нам путь к своим анализаторам и генераторам кода(Source Generators and Source Analyzers)
Думаю на этом канале со временем сформируется целый отдельный плейлист с подробным разбором каждой из этих тем с прмерами и трюками. Мне есть что рассказать на эту тему и мне интересно копать ее дальше.
Но с чего-то нужно начинать. Я долго откладывал эту тему опасаясь, что не раскрою ее достойно за один раз. Что бы перестать боятся решил начать с чего-то небольшого, а потом на это навешивать многие уровни.
Telegram канал Dev Jungles - https://t.me/DevJungles
Поддержать канал можно:
Спонсорством на YouTube
Переводом на карту или пополнением банки монобанка:
Dev Jungles YouTube Channel Fund
https://send.monobank.ua/jar/7iAP3sZkm9
Номер карты банки:
5375 4112 0230 1466
Или криптой:
Binance Id: 479881646
BTC - 18C3jsFYwviN5FvzpAt4uMWRfUeVKvdWxy
ETH - 0x2903f63ba9009732272e91a299053b9d7b623216
USDT on ERC20 - 0x2903f63ba9009732272e91a299053b9d7b623216
USDT on TRC20 - TSmS5RzQKbWdxZkoM2oRo9HK8FYBaq744T
LTC - LN3CkrnvZLZTXDUhqTy1gUKMVpLjEPA4G2
Таймкоды:
0:00 - Введение
1:40 - Определение метапрограммирование
2:58 - Варианты метапрограмм
6:10 - Что есть в .Net для метапрограммирования
16:32 - CodeDom.Compiler
18:38 - Навигация по каналу
22:32 - Expression Trees
23:45 - Для чего можно использовать Expression Trees
26:37 - Пример написание Expression
47:00 - Запуск бенчмарков для сравнения Expression Trees и рефлексии (ответы на вопросы чата во время запуска)
54:20 - Анализ результатов бенчмарка
58:00 - Закешировали рефлексию и перезапустили бенчмарк
1:02:00 - Анализ результатов бенчмарка
1:03:07 - Двигаем дальше (проблема дублирования кода)
1:09:53 - Кеширование лямбды
1:13:40 - Андрей нас обманул
1:19:00 - Паттерн спецификация
1:32:00 - ParameterReplacer
1:40:00 - Как устроен визитор
1:42:00 - Ссылки на интересные инструменты
1:46:25 - Конец презентации. Переход к Expression Building. Практическая часть.