Информация об изменениях

Сообщение Re[17]: Есть ли подобие LINQ на других языках/платформах? от 19.04.2021 11:24

Изменено 19.04.2021 12:28 Serginio1

Re[17]: Есть ли подобие LINQ на других языках/платформах?
Здравствуйте, Ikemefula, Вы писали:

S>> Я говорил про yield и ленивые вычисления при которых происходит вычисление справа на лево и избавляемся от лишних циклов?


I>yield сам по себе вносит потери. Неважно, есть лишние циклы, или нет. x[i] заменяется на доступ через итератор. Вот уже проблема.



То есть ты не согласен с тем, что без yield был бы возможен Linq?
С yield IEnumerable создается автоматически. Заметь IEnumerable! Если тебе где то в конце цепочки вызовов итераторов понадобится Top(5)
то тебе не нужно перебирать всю коллекцию и вызвать все лямбды в цепочке расширений.
Но для тебя же это не затраты!!

То что ты пишешь ну никак не относится к

Еще нужно добавить про yield и ленивое выполнение.
То есть при выполнении цепочки

list.Where.Where.Select.Count
List пройдет всего один цикл ибо выполнение начнется с права на лево
Count вызовет MoveNext у Select, Select у Where и так далее.
По этому мы можем объединять Where без потери производительности на лишние циклы

К которому ты упорно ставишь минусы и при этом сваливаешься на производительность yield.
yield создает объект класса реализующий IEnumerable.
Как замедляется доступ к энумератору если он вызывает MoveNext. Передается то IEnumerable а не List или array.
На этом основан Linq!
Да можно оптимизировать и инлайнить, но мало кому это нужно. Я тебе приводил примеры на оптимизацию Linq https://mattwarren.org/2016/09/29/Optimising-LINQ/
И поверь мало кто ими пользуются.

Но это все лирика.

Еще раз ответь с чем ты не согласен?
Основной посыл сообщения в том, что не было бы Linq без yield
Re[17]: Есть ли подобие LINQ на других языках/платформах?
Здравствуйте, Ikemefula, Вы писали:

S>> Я говорил про yield и ленивые вычисления при которых происходит вычисление справа на лево и избавляемся от лишних циклов?


I>yield сам по себе вносит потери. Неважно, есть лишние циклы, или нет. x[i] заменяется на доступ через итератор. Вот уже проблема.



То есть ты не согласен с тем, что без yield был бы возможен Linq?
С yield IEnumerable создается автоматически. Заметь IEnumerable! Если тебе где то в конце цепочки вызовов итераторов понадобится Top(5)
то тебе не нужно перебирать всю коллекцию и вызвать все лямбды, new в цепочке расширений.
Но для тебя же это не затраты!!

То что ты пишешь ну никак не относится к

Еще нужно добавить про yield и ленивое выполнение.
То есть при выполнении цепочки

list.Where.Where.Select.Count
List пройдет всего один цикл ибо выполнение начнется с права на лево
Count вызовет MoveNext у Select, Select у Where и так далее.
По этому мы можем объединять Where без потери производительности на лишние циклы

К которому ты упорно ставишь минусы и при этом сваливаешься на производительность yield.
yield создает объект класса реализующий IEnumerable.
Как замедляется доступ к энумератору если он вызывает MoveNext. Передается то IEnumerable а не List или array.
На этом основан Linq!
Да можно оптимизировать и инлайнить, но мало кому это нужно. Я тебе приводил примеры на оптимизацию Linq https://mattwarren.org/2016/09/29/Optimising-LINQ/
И поверь мало кто ими пользуются.

Но это все лирика.

Еще раз ответь с чем ты не согласен?
Основной посыл сообщения в том, что не было бы Linq без yield