Interested Article - Ленивые вычисления

Стратегии вычисления
Строгие вычисления
Нестрогие вычисления
Недетерминированные стратегии
Другие

Ленивые вычисления ( англ. lazy evaluation , также отложенные вычисления ) — применяемая в некоторых языках программирования стратегия вычисления , согласно которой вычисления следует откладывать до тех пор, пока не понадобится их результат. Ленивые вычисления относятся к нестрогим вычислениям . Усовершенствованная модель ленивых вычислений — оптимистичные вычисления — переходит в разряд недетерминированных стратегий вычисления .

Отложенные вычисления позволяют сократить общий объём вычислений за счёт тех вычислений, результаты которых не будут использованы. Программист может просто описывать зависимости функций друг от друга и не следить за тем, чтобы не осуществлялось «лишних вычислений».

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

Некоторые языки программирования, реализующие ленивые вычисления:

  • Haskell — язык программирования, в котором наиболее полно реализованы отложенные вычисления, в частности, в языке нет оператора присваивания значения переменной, а только операцию определения функциональной зависимости; благодаря ленивым вычислениям в языке возможно оперирование бесконечными коллекциями . Строго говоря, Haskell — ленивый по умолчанию, он предоставляет как стандартные средства (seq, deepseq, строгое вычисление полей в алгебраических типах ), так и языковые расширения (BangPatterns) для строгого вычисления.
  • Mathematica и Maxima допускают отложенные вычисления с помощью оператора определения « := ».
  • в Python , C# , Java 8 и ряде других языков ленивые вычисления реализованы с помощью функций-генераторов и ключевого слова yield .
  • в языках D и Scala имеется ключевое слово lazy .

Для использования ленивых вычислений не обязательна встроенная поддержка на стороне языка программирования, во многих случаях отложенные вычисления могут быть реализованы любыми доступными средствами. Например, в практике многих языков широко применяется шаблон проектирования « отложенная инициализация », предписывающий переносить выполнение ресурсоёмких операций по созданию объектов или получения значения непосредственно перед использованием. Для ряда языков созданы библиотеки, обеспечивающие работу с ленивыми вычислениями, например, для JavaScript таковы , , Immutable.js и .

Ссылки

Источник —

Same as Ленивые вычисления