Многопоточность. Функциональное программирование. Состояния

Если вы читали мою критику на счет функционального программирования (Часть 1 и Часть 2), тогда попробуем проанализировать один момент.

Функциональное программирования (далее - ФП) не всегда "работает в 2D-плоскости", иногда людям хочется расширить, некоторые горизонты, по применяемым средствам. В частности это выражается в создании библиотек, имитирующих работу с объектами, и в создании некоторых паттернов, где функцией пытаются оперировать как объектом...

И вот, наступает такой момент, для таких "продвинутых" товарищей, когда в ФП приходится иметь дело с состояниями.Тут сразу теряется все хваленое преимущество при работе с многопоточностью, ведь как раз отсутствие состояний у объектов - в мире ФП - как раз и позволяло им говорить о некоторых преимуществах.

Небольшое отступление. Далее будут упомянуты 2 ссылки, на видео, все на английском, поэтому хорошо знающим английский язык - лучше просто посмотреть их, и прочитать краткие пояснения к ним, там же (Ссылка 3, Ссылка 4).

Если же лениво, и вы хотите довольствоваться моим "обгрызанием" темы, с моим техническим английским, с которым я эти видео-демонстрации не смотрел, а вынужден довольствоваться только английским текстом рядом с ними - тогда можете оставаться. :)

Кстати, обращаю внимание тех, кто знает английский лишь на уровне технического - в упомянутой уже Ссылке 3 - текста (английского) - кот наплакал, поэтому все-таки кликните. Ну в самом деле там крохи того текста.

А вот в упомянутой Ссылке 4 - английского текста много, но он читается совершенно легко, для тех кто знает только технический английский (надеюсь данная ссылка имеет отношение к предыдущей, мне показалось что имеет).

Выделим характерную цитату из упомянутой Ссылки 3:
"When mutable state is needed, Clojure offers a software transactional memory system and reactive Agent system that ensure clean, correct, multithreaded designs."

И после этого "приложим" сюда рассказ про "реактивный" ФП-фреймворк из упомянутой Ссылки 4.

Что же получается? (с поправкой на то, что сами видеоматериалы лично я не смотрел)

Получается примерно такая картина - когда в ФП приходится иметь с состояниями - то решение сводится к транзакционной памяти, которую введут в .NET 4 (заимствование идеи из мира СУБД - фиксация удачной операции, если другой поток не внес изменения; сама идея еще прорабатывается, хотя для желающих уже доступна версия для скачивания), а так же - к использованию событий (куда, каким-то хорошим боком, относится всем известный паттерн Observer из GoF).

В общем-то все, что я хотел сказать...

0 коммент.:

Отправить комментарий