|
|
|
Нужны ли монады в C++?03.08.2015, 21:50. Показов 5794. Ответов 63
Всем привет.
Наверняка всем вам известен такой ресурс как Habrahabr. Так вот. Не так давно я случайно наткнулся на одну интересную тему под названием "Монады и do-нотация в C++" (link). Честно говоря, до этого я не знал что такое монады, но после прочтения темы у меня сложилось впечатление что лучше бы я их и не знал. Дело не в том что это что-то страшное и сложное, просто мне кажется что использование монад в C++ лишь усложняет код. Люди же в некоторых комментариях считают иначе. А что считаете вы? В каких ситуациях монады могут облегчить чтение кода или повысить его производительность?
0
|
|
| 03.08.2015, 21:50 | |
|
Ответы с готовыми решениями:
63
Монады Стейты, Монады Палиндромы и монады |
| 06.08.2015, 19:18 [ТС] | |
|
0
|
|
| 06.08.2015, 19:42 | |
|
0
|
|
| 06.08.2015, 19:50 | |
|
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||||||
| 10.08.2015, 08:26 | |||||||
|
Попробуй кратно и просто сначала объяснить, что это такое и зачем нужно. Не можешь? Значит они и тебе то не нужны. Ну хотябы найди готовое описание. Простое, понятноное и не требующее рассуждений ни о всяких там кривонациях, хоть до, хоть я, хоть ре, хоть вообще ми, ни о загадочных тайп-классах. И при этом не сводящееся к мухлежу другими языками и не требующее их полного освоения для понимания сути конкретной языковой конструкции. Нет такого? Значит они не нужны, а то, для чего они якобы предназначены, проще сделать по-другому, чем изучать сами монады.
Добавлено через 13 минут
1. Подпрограммой и её вызовом. В c++ функцией и её вызовом. 2. Процедурным типом, или его аналогом. В c++ указателем на функцию.
0
|
|||||||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 10.08.2015, 08:35 | |
|
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 10.08.2015, 08:38 | |
|
Значит показалось.
0
|
|
|
204 / 26 / 5
Регистрация: 22.05.2015
Сообщений: 357
|
|
| 17.08.2015, 00:37 | |
|
0
|
|
|
Модератор
|
|
| 17.08.2015, 23:48 | |
|
Попробую объяснить, зачем нужны монады в Haskell без примеров кода.
В ФП часто используются цепочки из функций – результат одной функции подставляется как аргумент другой. Синтаксис позволяет записывать такие цепочки компактно, без обилия скобок. Но, часто, просто передавать один аргумент по цепочке недостаточно. Простейший пример – передавать два значения. Можно ручками – разворачивать то, что возвратила функция и передавать в два аргумента. Но, сразу потеряется компактность. Монада State позволяет передавать ещё один аргумент «незаметно», и, таким образом, решать эту проблемку. В общем случае, монады предоставляют возможность устроить цепочку функций с «наворотами» - ведение лога, операции ввода-вывода, чтение конфигурации, парсинг выражений … много чего. Монады могут быть вложены друг в друга образуя монадный стек. Сами монады не встроены в Haskell, но компилятор предоставляет для них сахар. С сахарком можно записывать код, похожий на императивный, хотя, на самом деле, он разворачивается всё в ту же цепочку функций. castaway привёл пример библиотеки реализации монад на плюсах. Я её, честно говоря, не смотрел пока. Исходя из вышесказанного, в императивном языке, монады, как минимум, не так важны.
0
|
|
|
72 / 72 / 5
Регистрация: 10.02.2013
Сообщений: 434
|
|
| 23.08.2015, 18:13 | |
|
Я видел этот паттерн. Его облюбовал один из создателей boost::spirit (Hartmut Kaiser). Его асинхронная библиотека(hpx) работает подобным образом.
Суть его не в том, что это монада, а в том, что это позволяет писать быстрый читаемый асинхронный код. Добавлено через 23 секунды "Избавиться от спагетти-кода" - один из их лозунгов))
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 28.08.2015, 19:33 | |||
|
даже для тех, кто очень плотно имел дело с спиритом.
0
|
|||
|
72 / 72 / 5
Регистрация: 10.02.2013
Сообщений: 434
|
||||||
| 29.08.2015, 14:17 | ||||||
|
hoggy, говори честно - какие наркотики употребляешь. Может у тебя еще есть шанс на спасение. То код с исключениями не сопровождаем, то годные DSL нужно обязательно выкинуть на помойку. Тогда уж лучше совсем забыть о крестах, и взять сишку.
Вот как предлагается писать асинхронный код
spirit же очень читаемый. Нужно только уметь правильно ориентироваться в ошибках.
0
|
||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 29.08.2015, 14:40 | ||
|
чего я никогда не утверждал, этот вопрос вы можете задать самому себе.
0
|
||
|
72 / 72 / 5
Регистрация: 10.02.2013
Сообщений: 434
|
|
| 29.08.2015, 15:01 | |
|
hoggy, видишь у тебя уже склероз от зависимости.
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 29.08.2015, 15:04 | |
|
0
|
|
| 29.08.2015, 15:49 | |
|
0
|
|
|
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
|
|
| 05.09.2015, 20:33 | |
|
Монады в c++ не нужны. C++ тоже не нужен.
0
|
|
|
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
|
|
| 05.09.2015, 21:11 | |
|
0
|
|
| 05.09.2015, 21:11 | |
|
Монады, чистые/грязные функции Как реализованы операции монады над списками? Какие значения нужны нужны циклу while? нужны отзывы Нужны советы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|