Ленивые вычисления
Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 2 февраля 2019 года; проверки требуют 3 правки.
Ленивые вычисления (
нестрогим вычислениям. Усовершенствованная модель ленивых вычислений — оптимистичные вычисления — переходит в разряд недетерминированных стратегий вычисления
.
Отложенные вычисления позволяют сократить общий объём вычислений за счёт тех вычислений, результаты которых не будут использованы. Программист может просто описывать зависимости функций друг от друга и не следить за тем, чтобы не осуществлялось «лишних вычислений».
Ленивые вычисления естественным образом легли на
электронно-вычислительных устройств
.
Некоторые языки программирования, реализующие ленивые вычисления:
- Haskell — язык программирования, в котором наиболее полно реализованы отложенные вычисления, в частности, в языке нет оператора присваивания значения переменной, а только операцию определения функциональной зависимости; благодаря ленивым вычислениям в языке возможно оперирование бесконечными коллекциями. Строго говоря, Haskell — ленивый по умолчанию, он предоставляет как стандартные средства (seq, deepseq, строгое вычисление полей в алгебраических типах), так и языковые расширения (BangPatterns) для строгого вычисления.
- Mathematica и Maxima допускают отложенные вычисления с помощью оператора определения «
:=
». - в Python, C#, Java 8 и ряде других языков ленивые вычисления реализованы с помощью функций-генераторов и ключевого слова
yield
. - в языках D и Scala имеется ключевое слово
lazy
.
Для использования ленивых вычислений не обязательна встроенная поддержка на стороне языка программирования, во многих случаях отложенные вычисления могут быть реализованы любыми доступными средствами. Например, в практике многих языков широко применяется
отложенная инициализация», предписывающий переносить выполнение ресурсоёмких операций по созданию объектов или получения значения непосредственно перед использованием. Для ряда языков созданы библиотеки, обеспечивающие работу с ленивыми вычислениями, например, для JavaScript таковы Streams.js, linq.js, Immutable.js и node-lazy
.
Ссылки
![]() | В статье не хватает ссылок на источники (см. рекомендации по поиску). |