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" => ...
Пока есть ДЕТЕРМИНИРОВАННОСТЬ.
Но! Как только её - НЕТ, то появляются - МОНАДЫ.
И как они "помогают" компилятору? Не понимаю..
КАК "функция зависящая от МОНАДЫ" становится детерминированной? Ну чтобы все "плюшки" (кешируемость и параллизм) функциональных языков начинали работать?
"Назад к байтам".. Может быть кто-нибудь объяснит мне?
Чем хороши "функциональные языки"? А ТЕМ, что они:
1. Позволяют КЕШИРОВАТЬ результат вычисления функции (с таблицами Брадиса - надеюсь ВСЕ знакомы).
2. Позволяют РАСПАРАЛЕЛИВАТЬ процесс вычисления.
Почему? ПОТОМУ, что ВСЕ функции - ДЕТЕРМИНИРОВАННЫ. И НЕ НУЖДАЮТСЯ в "синхронизации".
Но!
Если НЕ ВСЕ функции детерминированны? Что делать?
Тут - "вроде вводят понятие монад". Но! Если функция "зависит от монады". то она сама является монадой? Ну как если таблицы Брадиса "меняются на лету"...
Или как? Может - http://18delphi.blogspot.ru/2013/07/blog-post_9746.html
Как МОНАДЫ "изнутри" устроены?
Что ИМЕННО позволяет МОНАДАМ быть "особыми", но в то же время "подсказывать компилятору" - как обрабатывать "момент недетерминированности"?
Haskell я ведь и САМ могу написать. Но! БЕЗ МОНАД. БЕЗ МОНАД - всё просто - результат функции (грубо говоря) складывается в "мапу" вида - "имя функции + значения её аргументов" => значения.
Ну как "таблицы Брадиса". sin(pi) = 1. "sin pi" => "1". "x^2 + y ^ 2" => ...
Пока есть ДЕТЕРМИНИРОВАННОСТЬ.
Но! Как только её - НЕТ, то появляются - МОНАДЫ.
И как они "помогают" компилятору? Не понимаю..
КАК "функция зависящая от МОНАДЫ" становится детерминированной? Ну чтобы все "плюшки" (кешируемость и параллизм) функциональных языков начинали работать?
"Назад к байтам".. Может быть кто-нибудь объяснит мне?
>Тут - "вроде вводят понятие монад". Но! Если функция "зависит от монады". то она сама является монадой?
ОтветитьУдалитьНет, функция, работающая с монадой, монадой не является.
>КАК "функция зависящая от МОНАДЫ" становится детерминированной?
Просто монады детерминированы, функции ничего делать не приходится. :О
>Как МОНАДЫ "изнутри" устроены?
Специально для вас накатал описание монаду State(популярна при обучении). Поможет понять как монады работают с состоянием:
http://pastebin.com/a1Kx0kcF
Спасибо! Посмотрю.
Удалить"В итоге State создаёт портянку из функций"
УдалитьААА.. Вот это уже - ПОНЯТНЕЕ. "портянку".
Каждая функция опирающаяся на монаду - ПОРОЖДАЕТ класс функций. Каждая из которых ДЕТЕРМИНИРОВАНА. Так?
Стоп!
УдалитьПусть есть функция f(x) которая опирается на монаду fileread.
И как мы это можем кешировать или распараллеливать?