Здравствуйте, Serginio1, Вы писали:
S>И. Еще раз там используются ленивые иераторы?
Итератор всегда ленивый. Никто тебя не заставляет вызывает MoveNext больше, чем тебе надо. И создавать итератор, раньше чем тебе надо, не нужно.
И копировать данные для итератора при создании тоже не нужно.
то есть, всё и так ленивое, без твоих yield.
S>Сколько в итоге будет итераций?
S>https://stackoverflow.com/questions/21782380/are-java-8-streams-the-same-as-net-ienumerable
Столько же. Посмотри интерфейс этого стрима и прекрати пороть чушь.
I>>Четвертый раз — вместо x[i] у тебя MoveNext, проход через switch, присваивание Current и чтение Current
I>>И вот эта каша крайне плохо инлайнится, а следовательно ест больше чем весит.
I>>Заметь — это уже в четвертый раз я пишу, а до тебя не доходит.
S> Ну в итоге вывод один. Ты против yield,
А ты, упорный. Раз я с тобой не согласен, значит — против yield
> но сам то Linq построен на ленивом создании итераторов.
Что значит "ленивое создание итераторов" ? Он и до введения yield создавался только по требованию, т.е. ленивым образом. А сам итератор и без тебя ленивый.
S>А yield как раз этим и занимается. Так понятнее.
Нет, не понятно. Итератор сам по себе ленивый, и так было до yield. И создавался ленивым образом, тоже до yield.
S> Для тебя лишние итерации, вызов лямбда выражений, селекты ничего не стоят!!!
Так было и до введения yield. Это бенефиты IEnumerable, они работают и без yield.
I>>>>Именно. Профайлер утверждает, что экономия может быть и полтора, и два, и даже десять раз.
S>>>Ну то есть ты за выполнение слева направо.
S> Где и какой профайлер?? Покажи данные!
Может тебе и код дать и пароли?
I>>Откуда такой вывод? Я и слева направо обгоню это IEnumerable с не меньшим бенефитом.
S> Даааа!! вот твой же пример с миллионами строк пр этом первая же строка удовлетворяе условию.
S>Вот такие у тебя профайлеры. Но минус то ты мне ставишь!!
Именно. x[0] инлайнится враз и стоит считай бесплатно. А x.FirstOrDefault() в сравнении с этим неимоверно дорог.
Например, когда эта операция одна из основных в экспоненциальном алгоритме, любая издержка дает конское отставание.
I>>Если собираешся итерировать по индексу, лучше запрашивать массив явно — исключается целый класс ошибок.
S> Даа. А если нужно передать из метода и вернуть из вызываемого метода.
S>Ты никогда с не работал с пользовательским выбором условий и выводом, когда вариаций куча, а пользователь интерактивно, динамически сам выбирает конструкцию запроса.
Не смеши людей. Я портировал часть Linq и ODATA на JavaScript, а что сделал ты ?
I>>Вот снова ересь — ленивость создаёт сам IEnumerable и никак иначе. Вобщем, каша. То одно пишешь, то другое, прямо противоположное
S>Нет. Заполнение List не лениво!!!!!
А зачем мне list если мне нужна только итерация? Создаем итератор, итерируемся, пока это нужно, профит. Все что надо — один класс создаём явно. yield — делает ровно то же, но не явно. Вся разница. И ленивости в каждом случае ровно одинаково.
S>Вот именно, сам разберись. Пока все не в тему. И ну и явно ты не разобрался с темой.
S>Почитай https://pvs-studio.com/ru/b/0808/#ID4EFF844D56
Разобрался примерно в 2003м году на корутинах Питона, а в 2008 нашел в С# yield