Size: a a a

Конференция C++ Russia

2020 February 26

AP

Antony Polukhin in Конференция C++ Russia
Александр Гранин
Так, друзья, а теперь важный вопрос. Кто идет на C++ Siberia и кто хочет поспорить со мной про монады там?
Буду готов поспорить, если будет:
- дано короткое и понятное людям определение монад
- короткий и ёмкий пример реализации
- список мест, где они могут нанести пользу

До сих пор все валились на пункте 1 :(
источник

DK

Denis Kormalev in Конференция C++ Russia
Antony Polukhin
Буду готов поспорить, если будет:
- дано короткое и понятное людям определение монад
- короткий и ёмкий пример реализации
- список мест, где они могут нанести пользу

До сих пор все валились на пункте 1 :(
источник

DK

Denis Kormalev in Конференция C++ Russia
бля, не та, ща
источник

DK

Denis Kormalev in Конференция C++ Russia
источник

AP

Antony Polukhin in Конференция C++ Russia
Спорить с этим бессмысленно :)
источник

DK

Denis Kormalev in Конференция C++ Russia
источник

AB

Aleksandr Borgardt in Конференция C++ Russia
А это кто ?
источник

DK

Denis Kormalev in Конференция C++ Russia
Aleksandr Borgardt
А это кто ?
Красивая девочка, которая знает что такое монады
источник

AB

Aleksandr Borgardt in Конференция C++ Russia
А ок
источник

PZ

Pavel Zhigulin in Конференция C++ Russia
Я вот много раз пытался читать про монады и так ничего и не понял. Точнее, примеры монад всегда были понятны, но я так и не смог понять что они такое в общем виде.
источник

PZ

Pavel Zhigulin in Конференция C++ Russia
И что они такое делают невероятное, кроме того, что позволяют лишний раз if не писать с проверкой результата
источник

S

Sergey in Конференция C++ Russia
Antony Polukhin
Буду готов поспорить, если будет:
- дано короткое и понятное людям определение монад
- короткий и ёмкий пример реализации
- список мест, где они могут нанести пользу

До сих пор все валились на пункте 1 :(
1) Монады - это дополнительный уровень абстракции который создает новую систему типов поверх существующей. В новой системе типов есть две операции: первая переводит объект из старой системы типов в новую (unit), а вторая (bind) - это выполнение произвольной функции над содержимым монады.
2) Есть 3 самых типа известных монад: MayBe, State и IO. Что такое MayBe представить достаточно легко, по смыслу это очень похоже на std::optional и std::variant, но... у них нет операции bind и нам каждый раз приходится проверять, есть ли значение в optional и писать свич на вариант. При наличии этой операции писать этот свич будет не надо. State монада - это чуть более сложная абстракция, которая добавляет какие то метаданные о типах. Характерный пример - это монада Try из скалы https://www.scala-lang.org/api/2.9.3/scala/util/Try.html. Там как и на С++ не существуют checked exception'ы, но в отличии от С++ никто как правило не ожидает, что ему неожиданно выбросят в морду эксепшен. Для того, чтобы обрабатывать ошибки зачастую используют эту монаду, которая по сути к возвращаемому значению добавляет опциональный эксепшен и если у тебя есть цепочка операций, сделанная через bind, то при падении первой операции у тебя просто запишется эксепшен в стейт и дальше функции выполняться не будут. IO монады достаточно сложные в понимании и не нужны в языках с императивными конструкциями
источник

S

Sergey in Конференция C++ Russia
Если брать примеры из С++, то std::future является недо стейт монадой без операции bind
источник

TS

Timur Safin in Конференция C++ Russia
Начало хорошее, но, всё ещё, не очень понятно почему от этого богатства си++ программисту станет лучше?
источник

S

Sergey in Конференция C++ Russia
У всего есть своя целевая аудитория. Аудитория функционального программирования - это
1) символьные вычисления
2) распределенные системы
Символьные вычисления как правило мало кому нужны, кроме тех, кто занимается научно исследовательской работой. На счет распределенных систем я скажу, что есть куча крутых вещей типа Apache Spark, Akka, Kafka, на которых собственно говоря живет вся бигдата, что не Яндекс и не большая четверка
источник

AV

Alexey Veselovsky in Конференция C++ Russia
Pavel Zhigulin
Я вот много раз пытался читать про монады и так ничего и не понял. Точнее, примеры монад всегда были понятны, но я так и не смог понять что они такое в общем виде.
Монада, в общем, это моноид в категории эндофункторов. Это если в общем :-)
источник

S

Sergey in Конференция C++ Russia
Кэп на связи :-D. Как ты думаешь, какая часть людей в этом чате понимает смысл слов, которые ты только что сказал?
источник

TS

Timur Safin in Конференция C++ Russia
Alexey Veselovsky
Монада, в общем, это моноид в категории эндофункторов. Это если в общем :-)
Кстати, давно хотел спросить - что такое эндофункторы?
источник

AV

Alexey Veselovsky in Конференция C++ Russia
Sergey
Кэп на связи :-D. Как ты думаешь, какая часть людей в этом чате понимает смысл слов, которые ты только что сказал?
Но хотели же общее определение...
источник

AV

Alexey Veselovsky in Конференция C++ Russia
Timur Safin
Кстати, давно хотел спросить - что такое эндофункторы?
Это функторы из категории в себя
источник