Size: a a a

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

2020 February 26

AV

Alexey Veselovsky in Конференция C++ Russia
Yauheni Akhotnikau
Ну это как бы подтверждение практичности функционального программирования вообще и монад в частности.
:-(

Но на ерланге то массово пишут. Хотя там все настолько просто, что не о чем особо говорить. Он скучный - скучнее Го
источник

PZ

Pavel Zhigulin in Конференция C++ Russia
Sergey
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 монады достаточно сложные в понимании и не нужны в языках с императивными конструкциями
Возвращаясь к определению монад, есть где-нибудь описание во что превращается unit, а во что bind для каждой из монад? Хотя бы для популярных?
источник

YA

Yauheni Akhotnikau in Конференция C++ Russia
Alexey Veselovsky
:-(

Но на ерланге то массово пишут. Хотя там все настолько просто, что не о чем особо говорить. Он скучный - скучнее Го
Массово на erlang-е разве что erlang-исты пишут. А в общей массе их на фоне тех же Go-шников и не видно.

А вообще я прекрасно помню, какой ажиотаж вокруг ФП на профильных форумах возник лет 15 назад. Казалось, что люди реально серебряную пулю нашли и все остальное неизбежно загнется в ближайшие несколько лет...

Но как-то часть идей из ФП перекочевала в мейнстримовые ЯП и все, пузырь сдулся. Haskell и Erlang как были нишевыми языками, так и остались. Scala вскоре стала вызывать оскомину и вместо нее на замену Java сделали Ceylon с Kotlin-ом.
источник

AV

Alexey Veselovsky in Конференция C++ Russia
Yauheni Akhotnikau
Массово на erlang-е разве что erlang-исты пишут. А в общей массе их на фоне тех же Go-шников и не видно.

А вообще я прекрасно помню, какой ажиотаж вокруг ФП на профильных форумах возник лет 15 назад. Казалось, что люди реально серебряную пулю нашли и все остальное неизбежно загнется в ближайшие несколько лет...

Но как-то часть идей из ФП перекочевала в мейнстримовые ЯП и все, пузырь сдулся. Haskell и Erlang как были нишевыми языками, так и остались. Scala вскоре стала вызывать оскомину и вместо нее на замену Java сделали Ceylon с Kotlin-ом.
А ещё раньше был бум языков с виртуальной машиной - типа jvm и .net, тогда массово с++ хоронили
источник

AV

Alexey Veselovsky in Конференция C++ Russia
А до того - ком и Корба
источник

AV

Alexey Veselovsky in Конференция C++ Russia
А до того (и одновременно с ними) - ООП как серебряная пуля, все есть объект!
источник

S

Sergey in Конференция C++ Russia
Pavel Zhigulin
Возвращаясь к определению монад, есть где-нибудь описание во что превращается unit, а во что bind для каждой из монад? Хотя бы для популярных?
template<typename T>
class Monad {
   Monad<T> unit(const T& t);

   template<typename U>
   Monad<U> bind(std::function<U, T> f);
};
источник

АГ

Александр Гранин in Конференция C++ Russia
Pavel Zhigulin
Возвращаясь к определению монад, есть где-нибудь описание во что превращается unit, а во что bind для каждой из монад? Хотя бы для популярных?
Есть цикл статей Yet Another Monad Tutorial от Mike Vanier, где этому уделяется центральное место. Но там Хаскель. Я переводил даже на русский
источник

YA

Yauheni Akhotnikau in Конференция C++ Russia
Alexey Veselovsky
А ещё раньше был бум языков с виртуальной машиной - типа jvm и .net, тогда массово с++ хоронили
Ну так и JVM, и .NET очень нехилый кусок пирога у C++ откусили. И, что характерно, никуда исчезать не собираются.

COM и CORBA плохие примеры, это над-языковые технологии.

А вот ООП как серебрянная пуля — похоже, но ООП практичнее все-таки оказался. По крайней мере во времена массового десктоп-программирования.
источник

FF

Flex Ferrum in Конференция C++ Russia
Alexey Veselovsky
А до того (и одновременно с ними) - ООП как серебряная пуля, все есть объект!
Кек. Егора Бугаевского здесь нет. Он бы пояснил за ООП. :)
источник

YA

Yauheni Akhotnikau in Конференция C++ Russia
Flex Ferrum
Кек. Егора Бугаевского здесь нет. Он бы пояснил за ООП. :)
Свят-свят-свят!
источник

FF

Flex Ferrum in Конференция C++ Russia
Бггг
источник

AZ

Alexander Zaitsev in Конференция C++ Russia
Flex Ferrum
Кек. Егора Бугаевского здесь нет. Он бы пояснил за ООП. :)
это какой-то знаменитый персонаж?
источник

FF

Flex Ferrum in Конференция C++ Russia
О да!
источник

PZ

Pavel Zhigulin in Конференция C++ Russia
Sergey
template<typename T>
class Monad {
   Monad<T> unit(const T& t);

   template<typename U>
   Monad<U> bind(std::function<U, T> f);
};
Это не совсем пример. Мне вот интересно, как внутри эти функции устроены
источник

AZ

Alexander Zaitsev in Конференция C++ Russia
По описанию похож на местных ФП фанатиков, только ООП
источник

АГ

Александр Гранин in Конференция C++ Russia
Sergey
template<typename T>
class Monad {
   Monad<T> unit(const T& t);

   template<typename U>
   Monad<U> bind(std::function<U, T> f);
};
Я боюсь, такой тип должен быть HKT. Здесь сам T тоже должен быть параметризуем
источник

YA

Yauheni Akhotnikau in Конференция C++ Russia
Alexander Zaitsev
это какой-то знаменитый персонаж?
Прежде всего пиаром себя и собственных воззрений на то, что есть ООП и каким ООП должен быть.
источник

FF

Flex Ferrum in Конференция C++ Russia
Alexander Zaitsev
это какой-то знаменитый персонаж?
Только я чуть ошибся. Не Бугаевский, а Бугаенко.
источник

AZ

Alexander Zaitsev in Конференция C++ Russia
Yauheni Akhotnikau
Прежде всего пиаром себя и собственных воззрений на то, что есть ООП и каким ООП должен быть.
а, иксперт. так и запишем
источник