Ленивая оценка
-
Определение ленивых вычислений
- Ленивые вычисления откладывают выполнение вычислений до тех пор, пока не потребуется результат.
- Отложенное вычисление позволяет избежать ненужных вычислений и экономить ресурсы.
-
Примеры ленивых вычислений
- В Haskell ленивые вычисления используются для оптимизации производительности и памяти.
- В JavaScript ленивые вычисления имитируются с помощью генераторов.
- В Python 3.x функция range() возвращает генератор, который вычисляет элементы списка по запросу.
-
Преимущества ленивых вычислений
- Отложенное вычисление экономит ресурсы, избегая ненужных вычислений.
- Ленивые вычисления могут быть полезны в сценариях с высокой производительностью, например, в функции mmap Unix.
-
Реализация ленивых вычислений
- Некоторые языки программирования по умолчанию откладывают вычисление выражений.
- В Haskell и Miranda вычисление аргументов функции по умолчанию откладывается.
- В Raku отложенное вычисление списков позволяет использовать бесконечные списки в качестве аргументов функций.
-
Управление рвением в ленивых языках
- В Haskell можно сделать код более энергичным или ленивым, явно закодировав это.
- Компиляторы могут оптимизировать строгость, что может сделать выбор программиста относительно строгой оценки несущественным.
-
Имитация лени на энергичных языках
- В Java отложенное вычисление может быть реализовано с помощью объектов, которые вычисляют значения при необходимости.
- В JavaScript отложенное вычисление может быть смоделировано с помощью генераторов.
- В Python 2.x и 3.x отложенное вычисление реализовано через генераторы и итераторы соответственно.
-
Лямбда-исчисление и отложенная оценка
- Лямбда-исчисление является основой для ленивых вычислений.
- Отложенная оценка может быть реализована через классы для замыкания функций в C++.
Полный текст статьи: