языковую возможность, как автор верно заметил, это очень похоже на корутины. И корутины тоже приняты без библиотечной поддержки. Я не считаю это катастрофой, в любом случае у пользователя должна оставаться возможность сделать собственную реализацию, независимо от наличия или отсутствия средств в стандартной библиотеке. А уж если у пользователя возможность появится рано или поздно — в чём проблема, если появится рано?
Лично мне вообще ни одна из имплементаций концепции монад для обработки исключений по той или иной причине не понравилась. Но я думаю, что появление такого оператора могло бы подстегнуть кого-то ещё на создание альтернативных решений или продумывание более успешного дизайна, который можно было бы добавить в стандарт значительно позже
Есть трюк, позволяющий использовать корутины для монадического интерфейса expected<float> get_float() noexcept { int _int = co_await get_int(); ... } Так что можно уже сейчас экспериментировать )
Корутины в нынешнем виде - ассемблер для написания асинхронных библиотек. Сейчас когда он есть, есть возможность получить качественную реализацию стандартной библиотеки
А как вообще обрабатываются монадические ошибки (не знаю как их правильно назвать) в реальном коде? То есть на уровне 1 вложенности можно написать чтото типа '?' rust, ну тоесть void g() { func1()?; func2()?; } А что будет на следующем уровне вложенности? Тоесть как вызвать функцию g? Тоже ставить вопросики типа g()?; Не получится ли тогда, что все везде будут ставить вопросы не задумываясь, и в результате получим теже самые исключения только в профиль?
Обсуждают сегодня