Pull to refresh
0
0
Дамир Шайхутдинов @Lost404

Разработчик встроенного ПО

Send message

Комбинация итераторов могут работать (и работают на практике) быстрее обычных циклов for, по следующим причинам:

  1. Комбинаторы используют замыкания. В случае, когда код замыкания является чистой функцией, компилятору проще вычислить отсутствие зависимостей данных между итерациями, соответственно можно лучше векторизовать циклы.

  2. При рефакторинге тела цикла в замыкание приходится приводить его к одному из стандартных комбинаторов (map/fold/reduce/filter), что также способствует уменьшению зависимостей между данными и ветвлениями. В тяжелых случаях тело цикла приводится не к одному комбинатору, а к нескольким, что тоже способствует упрощению кода. Упрощенный код легче читать человеку, и проще оптимизировать компилятору.

  3. Итераторы в расте могут передавать по цепочке т.н. size_hint(), которые реализованы для частых случаев - типа итератора по слайсам. Эта информация тоже может учитываться компилятором для построения более эффективного кода.

Пример ускорения: https://ipthomas.com/blog/2023/07/n-times-faster-than-c-where-n-128/

Information

Rating
Does not participate
Location
Berlin, Berlin, Германия
Date of birth
Registered
Activity