Size: a a a

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

2020 February 26

AT

Alexey Tkachenko in Конференция C++ Russia
то есть принципиально то же самое, только хуже?
источник

TS

Timur Safin in Конференция C++ Russia
ну вот да, кажется, что старая форма оне вполне вписывается в это современное безумие. "Оне делали"
источник

PZ

Pavel Zhigulin in Конференция C++ Russia
Александр Гранин
Ну maybe не слишком удобная замена именно исключеням, в maybe информацию об ошибке не передашь. Все же тема с исключениями более широкая. Мое мнение - исключения нельзя использовать для failure path в бизнес-логике. Можно только для экстренных ситуаций.
Ну, maybe - это просто


try
...
catch (...)
....


А Either это перехват конкретных исключений. Пока что не вижу разницы
источник

АГ

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

FF

Flex Ferrum in Конференция C++ Russia
Timur Safin
кстати, а как мы переводим на русский "they/them"?
(это я к вопросу "Sy Brand сделал")
он_а, если тебе действительно интересен ответ на этот вопрос. :)
источник

AP

Antony Polukhin in Конференция C++ Russia
Александр Гранин
Исключения скорее заменяются на expected (Either), там можно передавать информацию об ошибке
expected тоже представим в виде монады, и к нему неплохо прикручивается монадический интерфейс:

int i = try bar();
return i + try foo();
источник

АГ

Александр Гранин in Конференция C++ Russia
Antony Polukhin
expected тоже представим в виде монады, и к нему неплохо прикручивается монадический интерфейс:

int i = try bar();
return i + try foo();
Такой пропозал как раз и есть. Детали, правда, там уже не помню какие
источник

AV

Alexey Veselovsky in Конференция C++ Russia
Александр Гранин
Исключения - механизм языка. Монадические цепочки - это значения, ты можешь их переиспользовать, соединять с другими, применять генеричные монадические функции. Там их много, и они очень полезны, упрощают код. В итоге ты не просто пишешь логику, ты делаешь ее декларативной и более переиспользуемой
Динамическое конструирование и комбинирование транзакций?
источник

АГ

Александр Гранин in Конференция C++ Russia
Alexey Veselovsky
Динамическое конструирование и комбинирование транзакций?
?
источник

АГ

Александр Гранин in Конференция C++ Russia
Монадические цепочки, конечно, можно создавать динамически
источник

AV

Alexey Veselovsky in Конференция C++ Russia
По сути блок стейтментов в try - это транзакция
источник

AV

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

AV

Alexey Veselovsky in Конференция C++ Russia
А если ещё и вычисления ленивые...
источник

АГ

Александр Гранин in Конференция C++ Russia
Это мы еще не говорили про монадные трансформеры ;)
источник

AV

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

АГ

Александр Гранин in Конференция C++ Russia
Alexey Veselovsky
Но как потом выяснить, где оно сломалось?
Для Maybe/optional - никак, ты просто знаешь, что цепочка зафейлилась. А для Either/expected - ты возвращаешь специфическую ошибку, по которой и видно, какая функция в середине цепочки зафейлилась
источник

AV

Alexey Veselovsky in Конференция C++ Russia
Заучит это все круто, но хотелось бы реальных примеров хоть в псевдокоде.

Допустим пишем мы игру -стрелялочку. Скажем wolf3d старообрядный.

Где это пригодится? И будет ли это проще, гибче и быстрее нежели старая добрая императивщина?
источник

АГ

Александр Гранин in Конференция C++ Russia
ФП для реал-тайм игрушек не очень использовать. Если бы ты про пошаговые спросил, там в принципе можно придумать хорошие примеры. Скажем, в шахматах можно цепочки ходов завернуть в монаду Maybe или Either. Сделал ход, оценил ситуацию. Норм? Делай следующий ход. Не норм? Возвращай ошибку.
источник

PZ

Pavel Zhigulin in Конференция C++ Russia
Александр Гранин
Исключения - механизм языка. Монадические цепочки - это значения, ты можешь их переиспользовать, соединять с другими, применять генеричные монадические функции. Там их много, и они очень полезны, упрощают код. В итоге ты не просто пишешь логику, ты делаешь ее декларативной и более переиспользуемой
Но зачем? Есть где-нибудь статья/учебник, где вот берут императивный пример, переписывают монадически и получают ништяки
источник

AV

Alexey Veselovsky in Конференция C++ Russia
Александр Гранин
ФП для реал-тайм игрушек не очень использовать. Если бы ты про пошаговые спросил, там в принципе можно придумать хорошие примеры. Скажем, в шахматах можно цепочки ходов завернуть в монаду Maybe или Either. Сделал ход, оценил ситуацию. Норм? Делай следующий ход. Не норм? Возвращай ошибку.
Даже на плюсах?
источник