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

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

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

15 ответов

47 просмотров

есть 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)

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта