Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.149.229.253] |
|
Страницы: (16) « Первая ... 10 11 [12] 13 14 ... Последняя » все ( Перейти к последнему сообщению ) |
Сообщ.
#166
,
|
|
|
Цитата D_KEY @ Так range это позволяют. Если тебе не нужны, условно, предыдущие элементы и результаты, то зачем их держать? Перешел в результате обхода к следующему элементу и все. Ну, как бы да. Возможность повторного прохода закладывалась в дизайн. |
Сообщ.
#167
,
|
|
|
Цитата Flex Ferrum @ D_KEY, в плане примеров использования ленивых список (в частности) и ленивых вычислений вообще - могу привести свой кейс. У меня есть проект, в основе которого лежат различные операции на гиперграфе - выборка узлов, фильтрация, трансформация, сложные предикаты и прочие прелести. Понятно, что есть группа операций, в которых надо, например, обойти все связанные узлы, соответствующие некоторому критерию. А есть группа операций поиска, в которых итерации надо прерывать в момент нахождения узла. Для всего этого я и использую ленивые списки, которые ещё и в цепочки могу выстраивать с традиционными операциями map/filter/zip и т. п. А можно все тоже самое сказать не на "птичьем", понятном только узкому кругу секты избранных, языке, а на простом инженером языке? Чтобы ЛЮБОМУ инженеру было понятно в чем циммес использования "отложенных вычислений" и какой круг задач позволяет решать "ленивые вычисления" Добавлено Т.е., как я понял, вычисления не делаются, а планируются. Т.е. "откладываются на потом". Копятся. А потом когда накапливается критическая масса БАХ. И вычисляются сразу всем скопом. И памяти не хватает и венда падает , а процессор сгорает от перегрева и атомный реактор взрывается. Так? Добавлено И главное не понятно, какая цель преследуется в данной парадигме (я об "отложенных (ленивых) вычислениях") Ставка делается на то, что возможно, что там понаписал программист возможно вообще не потребуется, поэтому и считать это не нужно прям щас? Это основная идея? |
Сообщ.
#168
,
|
|
|
Сообщ.
#169
,
|
|
|
Цитата Исмаил Прокопенко @ И главное не понятно, какая цель преследуется в данной парадигме (я об "отложенных (ленивых) вычислениях") Когда то лет так 25 тому назад я вел курс "Архитектура вычислительных систем". Одним из подразделов курса были так наз. редукционные машины. Именно в программировании этой архитектуры впервые и появилось понятие ленивого вычисления. И для хорошего понимания причин их появления я бы посоветовал вам прочитать Амамия М., Танака Ю. - Архитектура ЭВМ и искусственный интеллект - 1993.djvu, раздел 4 - Редукционные машины. Там все разъяснено...Книга в сети есть... |
Сообщ.
#170
,
|
|
|
Цитата Исмаил Прокопенко @ Как правило накопленное всем скопом не вычисляется. Вычисляется только то, что понадобилось. Иногда удаётся такие отложенные вычисления по ходу вычисления оптимизировать, так что процессор даже при необходимости вычислить ВСЁ греется меньше, чем при неленивом счёте. Т.е., как я понял, вычисления не делаются, а планируются. Т.е. "откладываются на потом". Копятся. А потом когда накапливается критическая масса БАХ. И вычисляются сразу всем скопом. И памяти не хватает и венда падает , а процессор сгорает от перегрева и атомный реактор взрывается. Добавлено Кстати, технология "Copy on Write/Update" тоже относится к "ленивым". |
Сообщ.
#171
,
|
|
|
Цитата amk @ Иногда удаётся такие отложенные вычисления по ходу вычисления оптимизировать, так что процессор даже при необходимости вычислить ВСЁ греется меньше Нуда, нуда. А на "оптимизировать" процессорные такты естественно не тратятся и проц не нагревается, Добавлено Цитата Oleg2004 @ редукционные машины Цитата редукционных вычислениях данный недостаток был преодолён тем, что исполнение команды инициируется запросом на её результаты. В математической основе таких вычислений лежат λ-исчисления. Все равно осталось за кадром: а НАФИГА? И насколько эффективно можно все это реализовать? Не будет ли на "оптимизацию" потока исполнения тратится еще больше времени, чем просто тупо в лоб все посчитать без откладывания? |
Сообщ.
#172
,
|
|
|
Принимать функцию неудобно, сигнатуры могут быть разные, а если мне нужно передать простую строку, накой городить функцию для этого? lazy string всяко удобнее. Причем здесь мемоизация я не понял.
Вот реальный пример функции enforce в стандартной либе D. Что-то вроде assert, но может бросать любое исключение (по умолчанию обычный Exception) и не удаляется компилятором в релизе. Упрощенно, сигнатура выглядит так: void enforce(bool condition, lazy string message) { ... } допустим мне нужно в текст исключения вставить значения некоторых переменных, самое простое задействовать функцию format. enforce(cmd.among("left", "right", "forward", "backward"), format("unknown command '%s'", cmd)); На самом деле, ленивые range - это частный случай ленивости. Допустим бесконечные range обязаны быть ленивыми: очередной элемент вычисляется тольео когда он необходим. Понятно, что можно обойтись и без них, задействовать обычные циклы, но это не вписывается в функциональный подход, и не универсально. Цитата Исмаил Прокопенко @ Зачем ЛЮБОМУ? Компетентный инженер прекрасно поймет написанное, а профнепригодный пусть верит на слово компетентным программистам. Функциональщина требует нехилого матана, недоступного для понимания обычному слесарю. Смирись и терпи. А можно все тоже самое сказать не на "птичьем", понятном только узкому кругу секты избранных, языке, а на простом инженером языке? Чтобы ЛЮБОМУ инженеру было понятно в чем циммес использования "отложенных вычислений" и какой круг задач позволяет решать "ленивые вычисления" |
Сообщ.
#173
,
|
|
|
Цитата applegame @ а если мне нужно передать простую строку, накой городить функцию для этого? lazy string всяко удобнее. Причем здесь мемоизация я не понял. Так а что такое lazy string, если не функция + мемоизация? В плюсах, кстати lazy<T> вроде несложно делается. |
Сообщ.
#174
,
|
|
|
Цитата applegame @ Компетентный инженер прекрасно поймет написанное Вы считаете, что инженер должен знать "птичий язык" программистов? Добавлено Если Вы будете продолжать тут общаться на своем птичьем языке "о своем о девичьем" топикстартер НИКОГДА не поймет для чего нужны "ленивые вычисления". |
Сообщ.
#175
,
|
|
|
Цитата Исмаил Прокопенко @ Цитата applegame @ Компетентный инженер прекрасно поймет написанное Вы считаете, что инженер должен знать "птичий язык" программистов? Форум программистов вроде Цитата Если Вы будете продолжать тут общаться на своем птичьем языке "о своем о девичьем" топикстартер НИКОГДА не поймет для чего нужны "ленивые вычисления". Если у него будет желание, то поймет. |
Сообщ.
#176
,
|
|
|
Цитата amk @ Иногда удаётся такие отложенные вычисления по ходу вычисления оптимизировать, так что процессор даже при необходимости вычислить ВСЁ греется меньше, чем при неленивом счёте. Есть мнение, что ленивые вычисления не столько экономят проц, сколько ускоряют работу программы. По крайней мере я бы искал профит именно в этом. |
Сообщ.
#177
,
|
|
|
Цитата Исмаил Прокопенко @ А можно все тоже самое сказать не на "птичьем", понятном только узкому кругу секты избранных, языке, а на простом инженером языке? Чтобы ЛЮБОМУ инженеру было понятно в чем циммес использования "отложенных вычислений" и какой круг задач позволяет решать "ленивые вычисления" Странная просьба. Я не написал ничего, что не было бы понятно "тупому программисту" и уж тем более опытному инженеру-программисту. Если у тебя возникли сложности с пониманием написанного - ну, что ж, возможно ты не так хорош, как программист, как о себе думаешь. Цитата Исмаил Прокопенко @ Т.е., как я понял, вычисления не делаются, а планируются. Т.е. "откладываются на потом". Копятся. А потом когда накапливается критическая масса БАХ. И вычисляются сразу всем скопом. И памяти не хватает и венда падает , а процессор сгорает от перегрева и атомный реактор взрывается. Нет. Не так. В программе описывается правило получение некоего результата (в виде функции), эта функция переносится в рантайм и вызывается только тогда, когда результат действительно необходим. Если такой необходимости не возникло - функция не вызывается. Всё, вроде, просто. Обычно используется в связке с операциями над списками и функциями второго порядка, но не всегда. |
Сообщ.
#178
,
|
|
|
Цитата Flex Ferrum @ Всё, вроде, просто. Нет, не все. Совершенно не раскрыта тема того, нафига вы тратите время на этого толстого тролля? |
Сообщ.
#179
,
|
|
|
Цитата D_KEY @ Может проблема в терминологии? Я под мемоизацией понимаю ситуацию, кода чистая функция кеширует результаты вычислений для наборов параметров и при повторении этих наборов сразу возвращает готовый результат. Такой мемоизации в lazy string я не вижу. А что ты имеешь в виду говоря мемоизация, может ты путаешь мемоизацию с замыканием?Так а что такое lazy string, если не функция + мемоизация? Цитата D_KEY @ Очень сомневаюсь. Но было бы интересно посмотреть на такое. Давай ссылку или сам набросай. В плюсах, кстати lazy<T> вроде несложно делается. |
Сообщ.
#180
,
|
|
|
Цитата Астарот @ Цитата Flex Ferrum @ Всё, вроде, просто. Нет, не все. Совершенно не раскрыта тема того, нафига вы тратите время на этого толстого тролля? Вот скажи, когда ты на наших заливных лугах последний раз троллей видел? Вот! А тут такой экземпляр. |