На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
Дорогие друзья! Поздравляем вас с днём Победы!
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (16) « Первая ... 10 11 [12] 13 14 ... Последняя » все  ( Перейти к последнему сообщению )  
> Функциональное програмирование , Что за зверь такой
    Цитата D_KEY @
    Так range это позволяют. Если тебе не нужны, условно, предыдущие элементы и результаты, то зачем их держать? Перешел в результате обхода к следующему элементу и все.

    Ну, как бы да. Возможность повторного прохода закладывалась в дизайн.
      Цитата Flex Ferrum @
      D_KEY, в плане примеров использования ленивых список (в частности) и ленивых вычислений вообще - могу привести свой кейс. У меня есть проект, в основе которого лежат различные операции на гиперграфе - выборка узлов, фильтрация, трансформация, сложные предикаты и прочие прелести. Понятно, что есть группа операций, в которых надо, например, обойти все связанные узлы, соответствующие некоторому критерию. А есть группа операций поиска, в которых итерации надо прерывать в момент нахождения узла. Для всего этого я и использую ленивые списки, которые ещё и в цепочки могу выстраивать с традиционными операциями map/filter/zip и т. п.

      А можно все тоже самое сказать не на "птичьем", понятном только узкому кругу секты избранных, языке, а на простом инженером языке?
      Чтобы ЛЮБОМУ инженеру было понятно в чем циммес использования "отложенных вычислений" и какой круг задач позволяет решать "ленивые вычисления"

      Добавлено
      Т.е., как я понял, вычисления не делаются, а планируются. Т.е. "откладываются на потом". Копятся.
      А потом когда накапливается критическая масса БАХ. И вычисляются сразу всем скопом. И памяти не хватает и венда падает , а процессор сгорает от перегрева и атомный реактор взрывается.

      Так?

      Добавлено
      И главное не понятно, какая цель преследуется в данной парадигме (я об "отложенных (ленивых) вычислениях")

      Ставка делается на то, что возможно, что там понаписал программист возможно вообще не потребуется, поэтому и считать это не нужно прям щас?

      Это основная идея?
        Цитата OpenGL @
        Цитата D_KEY @
        Куда?

        На стену.
        Цитата D_KEY @
        А как же

        Ты слишком толсто и явно троллишь. Давай тоньше :)

        Не надо слов, просто покажи код.
          Цитата Исмаил Прокопенко @
          И главное не понятно, какая цель преследуется в данной парадигме (я об "отложенных (ленивых) вычислениях")

          Когда то лет так 25 тому назад я вел курс "Архитектура вычислительных систем". Одним из подразделов курса были так наз. редукционные машины. Именно в программировании этой архитектуры впервые и появилось понятие ленивого вычисления.
          И для хорошего понимания причин их появления я бы посоветовал вам прочитать Амамия М., Танака Ю. - Архитектура ЭВМ и искусственный интеллект - 1993.djvu, раздел 4 - Редукционные машины. Там все разъяснено...Книга в сети есть... :D
            Цитата Исмаил Прокопенко @
            Т.е., как я понял, вычисления не делаются, а планируются. Т.е. "откладываются на потом". Копятся.
            А потом когда накапливается критическая масса БАХ. И вычисляются сразу всем скопом. И памяти не хватает и венда падает , а процессор сгорает от перегрева и атомный реактор взрывается.
            Как правило накопленное всем скопом не вычисляется. Вычисляется только то, что понадобилось. Иногда удаётся такие отложенные вычисления по ходу вычисления оптимизировать, так что процессор даже при необходимости вычислить ВСЁ греется меньше, чем при неленивом счёте.

            Добавлено
            Кстати, технология "Copy on Write/Update" тоже относится к "ленивым".
              Цитата amk @
              Иногда удаётся такие отложенные вычисления по ходу вычисления оптимизировать, так что процессор даже при необходимости вычислить ВСЁ греется меньше

              Нуда, нуда.
              А на "оптимизировать" процессорные такты естественно не тратятся и проц не нагревается, :lool:

              Добавлено
              Цитата Oleg2004 @
              редукционные машины

              Цитата
              редукционных вычислениях данный недостаток был преодолён тем, что исполнение команды инициируется запросом на её результаты. В математической основе таких вычислений лежат λ-исчисления.

              Все равно осталось за кадром: а НАФИГА?
              И насколько эффективно можно все это реализовать?
              Не будет ли на "оптимизацию" потока исполнения тратится еще больше времени, чем просто тупо в лоб все посчитать без откладывания?
                Цитата D_KEY @
                Ну принимай вместо lazy string функцию :) Нужна мемоизация? Сделай, вроде не сложно :)
                Принимать функцию неудобно, сигнатуры могут быть разные, а если мне нужно передать простую строку, накой городить функцию для этого? lazy string всяко удобнее. Причем здесь мемоизация я не понял.
                Вот реальный пример функции enforce в стандартной либе D. Что-то вроде assert, но может бросать любое исключение (по умолчанию обычный Exception) и не удаляется компилятором в релизе. Упрощенно, сигнатура выглядит так:
                ExpandedWrap disabled
                  void enforce(bool condition, lazy string message) { ... }

                допустим мне нужно в текст исключения вставить значения некоторых переменных, самое простое задействовать функцию format.
                ExpandedWrap disabled
                  enforce(cmd.among("left", "right", "forward", "backward"), format("unknown command '%s'", cmd));
                В "неленивом" языке либо пришлось бы самому городить if или смириться с тем, что сообщение об ошибке будет формироваться вхолостую даже когда никакой ошибки нет.
                Цитата D_KEY @
                Это не ленивость. Это просто range/iterator.
                На самом деле, ленивые range - это частный случай ленивости. Допустим бесконечные range обязаны быть ленивыми: очередной элемент вычисляется тольео когда он необходим. Понятно, что можно обойтись и без них, задействовать обычные циклы, но это не вписывается в функциональный подход, и не универсально.
                Цитата Исмаил Прокопенко @
                А можно все тоже самое сказать не на "птичьем", понятном только узкому кругу секты избранных, языке, а на простом инженером языке?
                Чтобы ЛЮБОМУ инженеру было понятно в чем циммес использования "отложенных вычислений" и какой круг задач позволяет решать "ленивые вычисления"
                Зачем ЛЮБОМУ? Компетентный инженер прекрасно поймет написанное, а профнепригодный пусть верит на слово компетентным программистам. Функциональщина требует нехилого матана, недоступного для понимания обычному слесарю. :-? Смирись и терпи.
                Сообщение отредактировано: applegame -
                  Цитата applegame @
                  а если мне нужно передать простую строку, накой городить функцию для этого? lazy string всяко удобнее. Причем здесь мемоизация я не понял.

                  Так а что такое lazy string, если не функция + мемоизация? В плюсах, кстати lazy<T> вроде несложно делается.
                    Цитата applegame @
                    Компетентный инженер прекрасно поймет написанное

                    Вы считаете, что инженер должен знать "птичий язык" программистов?

                    Добавлено
                    Если Вы будете продолжать тут общаться на своем птичьем языке "о своем о девичьем" топикстартер НИКОГДА не поймет для чего нужны "ленивые вычисления".
                      Цитата Исмаил Прокопенко @
                      Цитата applegame @
                      Компетентный инженер прекрасно поймет написанное

                      Вы считаете, что инженер должен знать "птичий язык" программистов?

                      Форум программистов вроде :)

                      Цитата
                      Если Вы будете продолжать тут общаться на своем птичьем языке "о своем о девичьем" топикстартер НИКОГДА не поймет для чего нужны "ленивые вычисления".

                      Если у него будет желание, то поймет.
                        Цитата amk @
                        Иногда удаётся такие отложенные вычисления по ходу вычисления оптимизировать, так что процессор даже при необходимости вычислить ВСЁ греется меньше, чем при неленивом счёте.

                        Есть мнение, что ленивые вычисления не столько экономят проц, сколько ускоряют работу программы. По крайней мере я бы искал профит именно в этом.
                          Цитата Исмаил Прокопенко @
                          А можно все тоже самое сказать не на "птичьем", понятном только узкому кругу секты избранных, языке, а на простом инженером языке?
                          Чтобы ЛЮБОМУ инженеру было понятно в чем циммес использования "отложенных вычислений" и какой круг задач позволяет решать "ленивые вычисления"

                          Странная просьба. Я не написал ничего, что не было бы понятно "тупому программисту" и уж тем более опытному инженеру-программисту. Если у тебя возникли сложности с пониманием написанного - ну, что ж, возможно ты не так хорош, как программист, как о себе думаешь.

                          Цитата Исмаил Прокопенко @
                          Т.е., как я понял, вычисления не делаются, а планируются. Т.е. "откладываются на потом". Копятся.
                          А потом когда накапливается критическая масса БАХ. И вычисляются сразу всем скопом. И памяти не хватает и венда падает , а процессор сгорает от перегрева и атомный реактор взрывается.

                          Нет. Не так. В программе описывается правило получение некоего результата (в виде функции), эта функция переносится в рантайм и вызывается только тогда, когда результат действительно необходим. Если такой необходимости не возникло - функция не вызывается. Всё, вроде, просто. Обычно используется в связке с операциями над списками и функциями второго порядка, но не всегда.
                            Цитата Flex Ferrum @
                            Всё, вроде, просто.

                            Нет, не все. Совершенно не раскрыта тема того, нафига вы тратите время на этого толстого тролля? :-?
                              Цитата D_KEY @
                              Так а что такое lazy string, если не функция + мемоизация?
                              Может проблема в терминологии? Я под мемоизацией понимаю ситуацию, кода чистая функция кеширует результаты вычислений для наборов параметров и при повторении этих наборов сразу возвращает готовый результат. Такой мемоизации в lazy string я не вижу. А что ты имеешь в виду говоря мемоизация, может ты путаешь мемоизацию с замыканием?
                              Цитата D_KEY @
                              В плюсах, кстати lazy<T> вроде несложно делается.
                              Очень сомневаюсь. Но было бы интересно посмотреть на такое. Давай ссылку или сам набросай.
                                Цитата Астарот @
                                Цитата Flex Ferrum @
                                Всё, вроде, просто.

                                Нет, не все. Совершенно не раскрыта тема того, нафига вы тратите время на этого толстого тролля? :-?

                                Вот скажи, когда ты на наших заливных лугах последний раз троллей видел? Вот! :) А тут такой экземпляр. :)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0551 ]   [ 15 queries used ]   [ Generated: 9.05.24, 14:10 GMT ]