Перейти к содержимому

Программы, которые пишут себя сами | Метапрограммирование в 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. Практическая часть.