Что такое ленивые вычисления?

А первый бумеранг придумал мужик, которому было лень стирать носок, и он его выкинул...

По мотивам bash.org.ru

Среди терминов, которые мы с вами разбирали в ставшей уже доброй традицией для "Компьютерных вестей" рубрике FAQ, было немало таких, с которыми рядовой пользователь вряд ли часто сталкивается в своей повседневной жизни. Собственно говоря, к этому типу терминов относится и тот, о котором мы с вами будем вести речь сейчас. Что, впрочем, совсем не означает, что термин этот редко используется, и никому, кроме бородатых "гиков", не интересен, и среднестатистическому читателю нашей газеты никогда не встретится.

Что же такое ленивые вычисления? Так принято называть концепцию, активно используемую в некоторых языках программирования, согласно которой вычисления стоит откладывать ровно до того момента, пока не понадобится непосредственно их результат. Думаю, что вполне понятно, почему подобная концепция получила именно такое название. Кстати говоря, помимо термина "ленивые вычисления", также довольно часто используются и термины "отложенные вычисления" и "нестрогие вычисления".

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

Концепция ленивых вычислений отлично легла на парадигму функционального программирования, и сегодня большинством распространенных функциональных языков программирования такая вещь, как ленивые вычисления, поддерживается. Наиболее полно ленивые вычисления представлены в языке Haskell, который сегодня, в общем-то, вполне заслуженно ставят во главу списка функциональных языков программирования. Впрочем, "обычные" объектно-ориентированные языки также подтягиваются за своими "коллегами". Так, например, ленивые вычисления будут доступны разработчикам, использующим C++, по мере распространения стандарта C++0x. При применении некоторых несложных шаблонов проектирования приложений ленивые вычисления доступны также тем, кто пишет программы на C# и других объектно-ориентированных языках.

Вадим СТАНКЕВИЧ,
[email protected]

Версия для печатиВерсия для печати

Номер: 

12 за 2010 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!