Re[4]: C# 11 Preview Updates
От: Sinclair Россия https://github.com/evilguest/
Дата: 21.04.22 01:01
Оценка: 6 (1)
Здравствуйте, Kolesiki, Вы писали:
K>Пару раз за жизнь их использовал (не помню зачем), но наверное полезно. А будет ли полноценной заменой (выражениям) создать на лету C# код и его сканпелять?
Нет, не будет.
ET позволяют делать всякие прикольные штуки типа того же linq.
Весь смысл как раз в том, чтобы писать "обычный" C#-код, который превращается в AST, а не в MSIL. И потом это AST можно как-то анализировать и трансформировать.
Проблемы с нынешним состоянием этого раздела две:
1. Большинство фич, добавленных после C# 3.0, в Expression Tree недоступны. Понятно, что большинство из них там и не нужны, но, скажем, поддержки Tuple там сильно не хватает
2. Компилятор не знает, для чего может потребоваться Expression Tree, поэтому компилирует всё подряд. В том числе и код, который заведомо не удастся обработать выбранным провайдером.

Решения для обеих проблем есть. По первой есть Expression Futures, по второй есть идея использовать специальный провайдер.
Типа сейчас компилятор вызывает статические методы класса Expression; почему бы не дать возможность указать другой класс, методы которого вызывать.
Потенциально можно возвращать из них экземпляры произвольных типов, не обязательно из иерархии Expression. Но важно не это, а возможность проверить порождаемый код, не дожидаясь вызова провайдера.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.