Size: a a a

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

2020 February 26

S

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

FS

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

AV

Alexey Veselovsky in Конференция C++ Russia
Разве можно сложить два числа не изучив теоркат? В младших классах - теоркат, в старших - арифметика!
источник

S

Sergey in Конференция C++ Russia
Да... А в дестком саду - теория струн😂
источник

AV

Alexey Veselovsky in Конференция C++ Russia
Sergey
Да... А в дестком саду - теория струн😂
Да. А в старших классах проходить ньютоновскую механику как частный случай.
источник

AV

Alexey Veselovsky in Конференция C++ Russia
Нельзя двигаться вперёд не заложив фундамент и не зная основы!
источник

YA

Yauheni Akhotnikau 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 монады достаточно сложные в понимании и не нужны в языках с императивными конструкциями
> Там как и на С++ не существуют checked exception'ы, но в отличии от С++ никто как правило не ожидает, что ему неожиданно выбросят в морду эксепшен.

Не ожидают потому что не бросают или потому, что всем пох? Ну типа fail fast и все дела?
источник

S

Sergey in Конференция C++ Russia
Потому, что там бросать не принято.
источник

YA

Yauheni Akhotnikau in Конференция C++ Russia
Так там же сама JVM бросать может. Ведь, если я правильно помню, в JVM ссылочные типы создаются через new, а new может бросать исключения. Т.е. создается сам объект State-монады и при его создании вылетает исключение.

И что? Вся библия нафиг, ведь не принято же бросать...
источник

AV

Alexey Veselovsky in Конференция C++ Russia
Итого, исключения + цепочка стейтментов в try блоке джавы или там крестов - монада!
источник

S

Sergey in Конференция C++ Russia
Yauheni Akhotnikau
Так там же сама JVM бросать может. Ведь, если я правильно помню, в JVM ссылочные типы создаются через new, а new может бросать исключения. Т.е. создается сам объект State-монады и при его создании вылетает исключение.

И что? Вся библия нафиг, ведь не принято же бросать...
То, что бросает JVM - это не всегда Exception, может быть и Error, эти вещи как раз никто вообще никогда не ловит и идеологически ловить не правильно.
источник

YA

Yauheni Akhotnikau in Конференция C++ Russia
Sergey
То, что бросает JVM - это не всегда Exception, может быть и Error, эти вещи как раз никто вообще никогда не ловит и идеологически ловить не правильно.
Ну т.е., всем пох. Поскольку на exception safety забивается в принципе.

Но зато все монадами обмазано, лепота же.
источник

S

Sergey in Конференция C++ Russia
Давай говорить по честному: в JVM нет способа обработать OutOfMemoryError
источник

AV

Alexey Veselovsky in Конференция C++ Russia
Sergey
Давай говорить по честному: в JVM нет способа обработать OutOfMemoryError
Ухты! То есть и тут Java/scala слабее c++?
источник

MM

Medved Medvedievich in Конференция C++ Russia
Саш, сейчас Серега придет, и забанит тебя за такие картинки))
источник

S

Sergey in Конференция C++ Russia
Alexey Veselovsky
Ухты! То есть и тут Java/scala слабее c++?
Мне кажется, что слово слабее здесь не уместно. Оно подразумевает наличие строгого порядка. Тут его нет. У всех своя целевая аудитория
источник

S

Sergey in Конференция C++ Russia
Но в целом да, если хочется работать с памятью напрямую, то лучше забыть о JVM
источник

AV

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

S

Sergey in Конференция C++ Russia
Значит это не ваша целевая аудитория:-D
источник

AV

Alexey Veselovsky in Конференция C++ Russia
Кстати, а это исключение (о нехватке памяти) в jvm только при new бывает? Ведь память может кончиться и без new
источник