Re[36]: Есть ли подобие LINQ на других языках/платформах?
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.04.21 13:15
Оценка:
Здравствуйте, 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.