Size: a a a

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

2020 February 26

AV

Anton Vertver in Конференция C++ Russia
То есть сделает аллокацию виртуальной памяти
источник

OK

Oleg Kushmantsev in Конференция C++ Russia
а в случае если происходит негативный случай, что происходит с монадой тогда?
источник

AV

Alexey Veselovsky in Конференция C++ Russia
Anton Vertver
То есть сделает аллокацию виртуальной памяти
А бывает не виртуальная? Там же внизу один фиг mmap
источник

AV

Anton Vertver in Конференция C++ Russia
Alexey Veselovsky
А бывает не виртуальная? Там же внизу один фиг mmap
В плане системы нет, на практике бывает
источник

PZ

Pavel Zhigulin in Конференция C++ Russia
Sergey
Maybe монады нужны, чтобы не писать много if'ов и не проверять везде не является ли у тебя указатель nullptr, а рассматривать только позитивный случай.
Со стейт монадами примерно тоже самое: ты пишешь код, как будто у тебя только позитивный кейс и эксепшены не выпадают
Так в любом случае что-то нужно будет делать, если что-то пойдет не так. В плюсах тоже можно думать, что все хорошо, а если нет - бросится исключение
источник

AV

Anton Vertver in Конференция C++ Russia
Есть память, которая может только с физической памяти считываться, при этом являться якобы виртуальной
источник

АГ

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

До сих пор все валились на пункте 1 :(
Пункт 1 и есть главная ловушка, которую нужно обходить стороной. Определение ничего не даст для понимания, оно - математическое. Только использование, только практика.
источник

TS

Timur Safin in Конференция C++ Russia
В этом есть что-то религиозное
источник

PZ

Pavel Zhigulin in Конференция C++ Russia
Пока что ощущение - это чуть более прозрачный способ обработки ошибок
источник

АГ

Александр Гранин in Конференция C++ Russia
Pavel Zhigulin
Я вот много раз пытался читать про монады и так ничего и не понял. Точнее, примеры монад всегда были понятны, но я так и не смог понять что они такое в общем виде.
Потому что и не нужно понимать, что такое монады. Я хаскеллист 8 лет, я не понимаю, что они такое. Но я знаю, как многие из них использовать. При этом вряд ли смогу сам их сделать, потому что ничего не знаю об их внутренних механизмах
источник

DK

Dmitry Kazakov 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 монады достаточно сложные в понимании и не нужны в языках с императивными конструкциями
Возможно, глупый вопрос, а тут где-то пропозал для нового std::error пролетал, который бы в себя упаковал исключения. Это, случаем, не то же самое?
источник

АГ

Александр Гранин 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 монады достаточно сложные в понимании и не нужны в языках с императивными конструкциями
👍
источник

AV

Alexey Veselovsky in Конференция C++ Russia
Anton Vertver
В плане системы нет, на практике бывает
А что тут это значит? jvm делает mmap, получает кусок адресного пространства. Память физическая под это дело пока не выделена.  Память будет выделяться только когда приложение (jvm) попытается прочесть или записать что-то в каждую страницу этой памяти.

jvm пробежит по всему этому гигабайту памяти прежде чем отдавать пользователю, или отдаст как есть и тогда OutOfMemory случится уже когда пользователь начнёт с ней работать?
источник

DK

Dmitry Kazakov in Конференция C++ Russia
Я вот про этот доклад: https://youtu.be/coBz_CQ1tJ8
источник

АГ

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

AV

Anton Vertver in Конференция C++ Russia
Alexey Veselovsky
А что тут это значит? jvm делает mmap, получает кусок адресного пространства. Память физическая под это дело пока не выделена.  Память будет выделяться только когда приложение (jvm) попытается прочесть или записать что-то в каждую страницу этой памяти.

jvm пробежит по всему этому гигабайту памяти прежде чем отдавать пользователю, или отдаст как есть и тогда OutOfMemory случится уже когда пользователь начнёт с ней работать?
Система не даст выделить размер больше, чем дозволено, поэтому выбросит ошибку и делай что хочешь
источник

AV

Anton Vertver in Конференция C++ Russia
По крайней мере, так на Винде :)
источник

AV

Alexey Veselovsky in Конференция C++ Russia
Anton Vertver
Система не даст выделить размер больше, чем дозволено, поэтому выбросит ошибку и делай что хочешь
Система - позволит. Можно и 15 Тб выделить.
источник

AV

Alexey Veselovsky in Конференция C++ Russia
Anton Vertver
По крайней мере, так на Винде :)
Мы про политику overcommit в линуксах, которая суть дефолт
источник

AV

Anton Vertver in Конференция C++ Russia
Alexey Veselovsky
Мы про политику overcommit в линуксах, которая суть дефолт
Ну тогда тут просто эксепшн будет и все
источник