Здравствуйте, vdimas, Вы писали:
V>Пи чём тут C# 3.0? V>Экспериментировал я с выходом linq.
Ну вот он и вышел в C# 3.0. Зачем иметь свои IOperation<Result>, когда есть Expression<Func<Result>>?
Зачем AddIntOp<TLeft, TRight>, когда можно просто сделать Expression.Add(Expression.Variable(typeof(int), "x"), Expression.Constant(42))?
Вызываем на нём Compile(), и получаем полноценный бинарный код, ничуть не хуже, чем у AddIntOp.Execute().
V>Специально не делал то замечание, что сейчас арифметические операторы можно делать в генериках. V>С тобой же не раз обсуждали способы решения этой задчи.
Это вообще ортогональная задача. Арифметические операторы в интерфейсах позволяют нам делать арифметические функции типа T Sum(IEnumerable<T> operands).
Деревья выражений и без этого позволяли нам строить код динамически.
V>Такое ощущение, что ты не понимаешь, что пишешь.
V>На пальцах: статические локальные ф-ии ввели относительно недавно. V>Походу, под эту новую фичу не успели доработать некий внутренний ExpressionBuilder.
Эмм, по-моему, кто-то отстаёт от дискуссии. Некий внутренний ExpressionBuilder "не успели" доработать до примерно всего, что появилось после C# 3.0.
Это выглядит не как "неуспевание", а как намеренное решение не копать в эту сторону.
При этом важно понимать, что "внутренняя целостность" сама по себе имеет исключительно академическую ценность.
В реальных проектах решения принимаются исходя из практической, а не академической ценности. Вот, скажем, неумение использовать в деревьях выражений статик локалы аффектит примерно 0 человек в мире.
И для тех, кто на это напоролся, есть простой рецепт: перенесите статик локал в простой приватный статик. Всё, вопрос закрыт.
Альтернатива — давайте расширим библиотеку, расширим компилятор, допишем тесты. А, да, самое главное — ресурсы ограничены, поэтому чтобы сделать это, придётся не сделать что-то другое.
Ну вот и не нашлось никакой фичи в бэклоге, которая была бы нужна меньше, чем эта. Увы.
V>Как ты ставил эксперименты, никто так с Linq не работает.
Ну, "если вы хотите добиться успеха, вы должны быть готовы делать то, чего не хотят делать другие". Мне важно то, что "торчит наружу". Поэтому какие-то внутренние проблемы linq2d имеют низкую важность.
Вот отсутствие в ExpressionTrees тупл-инициализаторов торчит прямо наружу, и это мешает потенциальным клиентам linq2d.
V>Рассуждая так, дешевле совсем ничего не делать.
Нет. Отсутствие некоторых фич приносит прямой или косвенный убыток. Или, наоборот, допиливание каких-то фич может принести пользу большому количеству людей.
Так и принимаются продуктовые решения — постоянно приходится чем-то жертвовать.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.