169 похожих чатов

Привет всем. Не знаю, удачный ли чатик я выбрал для

вопроса, но он как будто в целом про концепцию фп и конкретно про Haskell. Прочитал, что в целом в мире фп нет идеи мутабельного состояния, что вместо мутации стейта мы создаем новый стейт на основе существующего с каким-то изменениями. А как тогда с файловой системой происходит работа? По логике это же мутабельный стейт, который может изменяться не только нашей программой? Или это другое в концепции фп? Или подразумевается, что это уже не часть фп, и за нас это все разруливают готовые библиотеки, ОС и тд? Сорри, если это неподходящий вопрос для этого чата

15 ответов

46 просмотров

есть IO монад, который дает возможность выходить во внешний мир и мутировать, как я понял

В целом мире есть (ML-семья языков), это в хаскельной семье скорее нет.

Gellert-Cringewald Автор вопроса
Ильгар Гамидов
есть IO монад, который дает возможность выходить в...

то есть типа для 95% процентов кода мы пишем иммутабельный код, и в 5% используем мутабельный стейт, типа в акторах, в библиотеках, которые работают с файлами и тд?

Gellert-Cringewald Автор вопроса
IC Rainbow
В целом мире есть (ML-семья языков), это в хаскель...

то есть у фп в целом нет такого требования, что все должно быть иммутабельное? У каких то языков есть, у каких то нет?

Gellert Cringewald
то есть типа для 95% процентов кода мы пишем иммут...

да, если нужно прочитать файл, печатать в консоль читать из консоли и т.д. - IO Monad в помощь. он помогает спокойно работать с грязным кодом (с побочкой (side effect))

Gellert Cringewald
то есть у фп в целом нет такого требования, что вс...

ФП не может требовать, оно не субъект (: Может требовать препод по ТЯП, или кто-нибудь ещё. В это всё и упирается - а для какой цели вообще это разделение проводится?

Gellert Cringewald
то есть типа для 95% процентов кода мы пишем иммут...

по сути мы изолируем мутабельный код от иммутабельного. мутабельный называют tainted а иммутабельный pure их разделяют каким нибудь интерфейсом который выдает либо ожидаемый результат либо сообщает что результат получить не удалось. вроде в learn you a haskell так объяснялось

Gellert Cringewald
то есть типа для 95% процентов кода мы пишем иммут...

Соотношение, конечно, не такое, но основная идея в том что мы можем разделить код с эффектами от кода без эффектов. То есть у нас есть логическое разделение по тому, что может совершать подсистема в коде.

Nutritional Rabbit
Соотношение, конечно, не такое, но основная идея в...

правильно, так легче контролировать код и отлавливать ошибки в случае чего

deadgnom32 λ yorozuya
по сути мы изолируем мутабельный код от иммутабель...

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

Gellert Cringewald
то есть типа для 95% процентов кода мы пишем иммут...

какие акторы имеются в виду? если те, что что в Акке или Эрланге, то они тоже могут быть полностью иммутабельны. там чистые данные на входе, чистые на выходе

Gellert-Cringewald Автор вопроса
Cheese Syrowiecki
какие акторы имеются в виду? если те, что что в Ак...

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

Gellert Cringewald
наверное не про конкретные какие то, в целом читал...

Не обязательно. Это может быть просто функция которая сама себя вызывает с новым "стейтом" в конце обработки сообщения.

Gellert Cringewald
🤔

actor counter = recv >>= \req -> print req >> actor (counter + 1)

Похожие вопросы

Обсуждают сегодня

У меня это всегда вопрос вызывало.. Нафига писать код так, чтобы потом ошибки вылавливать?
Nik
44
Всем привет. Сейчас я изучаю erlang по книге Erlang and OTP in action. Дошел до главы где реализуется первый gen server на примере tcp rpc сервера. Меня очень сильно смутил ко...
Freezing Death
10
что за асемблер кста?
Shvabrikk Nya
19
Добрый день! Пробую отловить исключение EConvertError: function _TryTextToDouble(var DoubleVar: Extended; Text: String): Boolean; begin try DoubleVar := StrToFloat...
Kirill Filippenok
19
всем привет. реально ли понять чем в процессе занята память? delphi/linux, процесс свой
Handatros
12
Подскажите... Есть ли название у способа разработки кода, в котором: сперва пишут минимальную рабочую структуру: Напр. ввод, обработка, вывод, контроль. Потом эту структуру д...
Budemposmotret
6
В дизассемблере вижу, что строки пихают в регистры через lea, почему так, а не через mov?
Oleg
8
А где @Grinyaha уважаемый пропал?
Am Ambrion
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Сделал краткий обзор магазина из статьи и заодно там же записал инструкцию по развёртыванию. https://www.youtube.com/watch?v=8-sE1vNk95Q (чё думаете по звуку? кое-что поменял...
Andrey K
17
Карта сайта