вторник, 17 сентября 2013 г.

Не устаю цитировать Джоэла...

http://local.joelonsoftware.com/mediawiki/index.php/%D0%90_%D0%B2%D0%B0%D1%88_%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D1%82%D0%B0%D0%BA_%D0%BC%D0%BE%D0%B6%D0%B5%D1%82%3F

Чем хороши "функциональные языки"? А ТЕМ, что они:

1. Позволяют КЕШИРОВАТЬ результат вычисления функции (с таблицами Брадиса - надеюсь ВСЕ знакомы).
2. Позволяют РАСПАРАЛЕЛИВАТЬ  процесс вычисления.

Почему? ПОТОМУ, что ВСЕ функции - ДЕТЕРМИНИРОВАННЫ. И НЕ НУЖДАЮТСЯ в "синхронизации".

Но!

Если НЕ ВСЕ функции детерминированны? Что делать?

Тут - "вроде вводят понятие монад". Но! Если функция "зависит от монады". то она сама является монадой? Ну как если таблицы Брадиса "меняются на лету"...

Или как? Может - http://18delphi.blogspot.ru/2013/07/blog-post_9746.html

Как МОНАДЫ "изнутри" устроены?

Что ИМЕННО позволяет МОНАДАМ быть "особыми", но в то же время "подсказывать компилятору" - как обрабатывать "момент недетерминированности"?

Haskell я ведь и САМ могу написать. Но! БЕЗ МОНАД. БЕЗ МОНАД - всё просто - результат функции (грубо говоря) складывается в "мапу" вида - "имя функции + значения её аргументов" => значения.

Ну как "таблицы Брадиса". sin(pi) = 1. "sin pi" => "1". "x^2 + y ^ 2" => ...

Пока есть ДЕТЕРМИНИРОВАННОСТЬ.

Но! Как только её - НЕТ, то появляются - МОНАДЫ.

И как они "помогают" компилятору? Не понимаю..

КАК "функция зависящая от МОНАДЫ" становится детерминированной? Ну чтобы все "плюшки" (кешируемость и параллизм) функциональных языков начинали работать?

"Назад к байтам".. Может быть кто-нибудь объяснит мне?

4 комментария:

  1. >Тут - "вроде вводят понятие монад". Но! Если функция "зависит от монады". то она сама является монадой?

    Нет, функция, работающая с монадой, монадой не является.

    >КАК "функция зависящая от МОНАДЫ" становится детерминированной?

    Просто монады детерминированы, функции ничего делать не приходится. :О

    >Как МОНАДЫ "изнутри" устроены?

    Специально для вас накатал описание монаду State(популярна при обучении). Поможет понять как монады работают с состоянием:
    http://pastebin.com/a1Kx0kcF

    ОтветитьУдалить
    Ответы
    1. "В итоге State создаёт портянку из функций"

      ААА.. Вот это уже - ПОНЯТНЕЕ. "портянку".

      Каждая функция опирающаяся на монаду - ПОРОЖДАЕТ класс функций. Каждая из которых ДЕТЕРМИНИРОВАНА. Так?

      Удалить
    2. Стоп!

      Пусть есть функция f(x) которая опирается на монаду fileread.

      И как мы это можем кешировать или распараллеливать?

      Удалить