Здравствуйте, vdimas, Вы писали:
I>>Expression это определенные ограничения, которые позволяют легко транслировать код и одновременно внятный конвеншн для сообщества.
V>Чего-чего? ))
V>А можно попунктно по-русски, чтобы было на что предметно отвечать?
Того-того.
I>>Кроме того, лямбда это упрощенный синтаксис и связывание по месту требования.
V>Только не "требования, связываемые по месту", а переменные или их значения (для иммутабельных языков это одно и то же).
"связывание по месту требования" ты прочел как "требования, связываемые по месту"
V>Соответственно, Y-комбинатор является костылём для тех языков, в которых замыкания могут быть только анонимными.
V>Но в C# замыканиям можно давать имя.
V>Поэтому, Y-костыль в C# не нужен.
Попробуй свои примерчики применить на IQueryable.
I>>Есть тут имя или нет, дело абсолютно десятое.
V>Вообще-то, присвоёние сущностям символических имён времени компиляции — это основа основ языков программирования.
V>Просто разные языки обладают разными возможностями.
V>Например, языки, в которых Y-комбинатор необходим, — они обязательно умеют "раскрывать" тела лямбд, иначе вся затея превращается в тыкву.
V>C# не умеет инлайнить тела делегатов, поэтому для него злоупотребление такой техникой является банальной глупостью. Невежеством.
Ну вот ты сам себе ответил еще раз — C# чего то не умеет. Как следствие — Linq этого тоже умеет.
I>>Но вот для рекурсии все становится иначе — и все ради этого самого экспрешна, что бы легко было анализировать, транслировать, выводить тип и тд и тд.
V>И вывод типов в C# лучше работает для неаонимных замыканий.
V>>>Ты глаза-то открой, все подробности спрятаны за неименованой ламбдой.
I>>У тебя стейтмент торчит снаружи
V>Еще раз — стейтмент в том примере спрятан внутри лямбды.
Раскрой глаза — у тебя стейтмент и внутри, и снаружи.
I>>а значит надо писать мануал, какие стейтменты можно/нельзя использовать, и отдельно описать присваивания.
V>Не надо.
Ты попробуй свой вариант для IQueryable применить.
I>>С экспрешном ничего такого делать не надо.
V>Глупости.
V>Non-pure ф-ии в C# не отличимы от pure, поэтому эти два кейза неотличимы.
В огороде бузина, а в Киеве дядька.
I>>Алё! С текущей версией языка ничего лучше недоступно — об чем и речь.
V>Т.е. слил?
Моя цель показать тебе, что все возможные решения приводят к простыням и дополнительным проблемам. Твой код это и есть те самые простыни/проблемы, о которых я говорю.
Разница только в том, что ты считаешь свой подход классным и применимым, а я это считаю ни разу не классным и неприменимым.