Сообщение Re[17]: Есть ли подобие LINQ на других языках/платформах? от 19.04.2021 11:24
Изменено 19.04.2021 11:30 Serginio1
Re[17]: Есть ли подобие LINQ на других языках/платформах?
Здравствуйте, Ikemefula, Вы писали:
S>> Я говорил про yield и ленивые вычисления при которых происходит вычисление справа на лево и избавляемся от лишних циклов?
I>yield сам по себе вносит потери. Неважно, есть лишние циклы, или нет. x[i] заменяется на доступ через итератор. Вот уже проблема.
То есть ты не согласен с тем, что без yield был бы возможен Linq?
С yield IEnumerable создается автоматически. Заметь IEnumerable! Если тебе где то в конце цепочки вызовов итераторов понадобится Top(5)
то тебе не нужно перебирать всю коллекцию.
То что ты пишешь ну никак не относится к
yield создает объект класса реализующий IEnumerable.
Как замедляется доступ к энумератору если он вызывает MoveNext. Передается то IEnumerable а не List или array.
На этом основан Linq!
Да можно оптимизировать и инлайнить, но мало кому это нужно. Я тебе приводил примеры на оптимизацию Linq https://mattwarren.org/2016/09/29/Optimising-LINQ/
И поверь мало кто ими пользуются.
Но это все лирика.
Еще раз ответь с чем ты не согласен?
Основной посыл сообщения в том, что не было бы Linq без yield
S>> Я говорил про yield и ленивые вычисления при которых происходит вычисление справа на лево и избавляемся от лишних циклов?
I>yield сам по себе вносит потери. Неважно, есть лишние циклы, или нет. x[i] заменяется на доступ через итератор. Вот уже проблема.
То есть ты не согласен с тем, что без yield был бы возможен Linq?
С yield IEnumerable создается автоматически. Заметь IEnumerable! Если тебе где то в конце цепочки вызовов итераторов понадобится Top(5)
то тебе не нужно перебирать всю коллекцию.
То что ты пишешь ну никак не относится к
К которому ты упорно ставишь минусы и при этом сваливаешься на производительность yield.Еще нужно добавить про yield и ленивое выполнение.
То есть при выполнении цепочки
list.Where.Where.Select.Count
List пройдет всего один цикл ибо выполнение начнется с права на лево
Count вызовет MoveNext у Select, Select у Where и так далее.
По этому мы можем объединять Where без потери производительности на лишние циклы
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)
то тебе не нужно перебирать всю коллекцию и вызвать все лямбды в цепочке расширений.
Но для тебя же это не затраты!!
То что ты пишешь ну никак не относится к
yield создает объект класса реализующий IEnumerable.
Как замедляется доступ к энумератору если он вызывает MoveNext. Передается то IEnumerable а не List или array.
На этом основан Linq!
Да можно оптимизировать и инлайнить, но мало кому это нужно. Я тебе приводил примеры на оптимизацию Linq https://mattwarren.org/2016/09/29/Optimising-LINQ/
И поверь мало кто ими пользуются.
Но это все лирика.
Еще раз ответь с чем ты не согласен?
Основной посыл сообщения в том, что не было бы Linq без yield
S>> Я говорил про yield и ленивые вычисления при которых происходит вычисление справа на лево и избавляемся от лишних циклов?
I>yield сам по себе вносит потери. Неважно, есть лишние циклы, или нет. x[i] заменяется на доступ через итератор. Вот уже проблема.
То есть ты не согласен с тем, что без yield был бы возможен Linq?
С yield IEnumerable создается автоматически. Заметь IEnumerable! Если тебе где то в конце цепочки вызовов итераторов понадобится Top(5)
то тебе не нужно перебирать всю коллекцию и вызвать все лямбды в цепочке расширений.
Но для тебя же это не затраты!!
То что ты пишешь ну никак не относится к
К которому ты упорно ставишь минусы и при этом сваливаешься на производительность yield.Еще нужно добавить про yield и ленивое выполнение.
То есть при выполнении цепочки
list.Where.Where.Select.Count
List пройдет всего один цикл ибо выполнение начнется с права на лево
Count вызовет MoveNext у Select, Select у Where и так далее.
По этому мы можем объединять Where без потери производительности на лишние циклы
yield создает объект класса реализующий IEnumerable.
Как замедляется доступ к энумератору если он вызывает MoveNext. Передается то IEnumerable а не List или array.
На этом основан Linq!
Да можно оптимизировать и инлайнить, но мало кому это нужно. Я тебе приводил примеры на оптимизацию Linq https://mattwarren.org/2016/09/29/Optimising-LINQ/
И поверь мало кто ими пользуются.
Но это все лирика.
Еще раз ответь с чем ты не согласен?
Основной посыл сообщения в том, что не было бы Linq без yield