Size: a a a

2020 March 18

N?

Nikolay ? in pro.cxx
исключения это очень хороший способ вычистить из кода весь клаттер
источник

N?

Nikolay ? in pro.cxx
вот как Кирпич показывает
источник

O

Ofee in pro.cxx
Konstantin
Что аз try на корутинах?
Что-то, разворачивающееся в такой код:
if (auto err = function()) {
 return error;
}

Кажется, примерно такой макрос применяется в Хромиуме. Но кто-то на реддите делал это через co_await
источник

N?

Nikolay ? in pro.cxx
и обрабатывать ошибки не в месте возникновения а там где есть полный контекст для их обработки внятной
источник

O

Ofee in pro.cxx
Побитый Кирпич
Если я пишу send_message_to_server(), то с исключениями я получаю гарантию, что на следующей строке сообщение отправлено
На практике таких гарантий почти никогда нет, ибо среда асинхронна, а сообщение нужно не только отправить, но и убедиться в доставке... Возможно, с корутинами что-то изменится, нужно будет смотреть, как с ними организована обработка исключений
источник

ПК

Побитый Кирпич in pro.cxx
Konstantin
Ну так это какой-то частный кейс. А если тебе надо отправить три запроса, а потом их результаты? Будешь обкладываться try-catch?
Ещё надо узнать как ты собираешься сообщать об ошибке в конструкторе. Или ты всё через two phase init делаешь? :)
источник

ПК

Побитый Кирпич in pro.cxx
Ofee
На практике таких гарантий почти никогда нет, ибо среда асинхронна, а сообщение нужно не только отправить, но и убедиться в доставке... Возможно, с корутинами что-то изменится, нужно будет смотреть, как с ними организована обработка исключений
send_message может внутри ждать и убеждаться в доставке, это не важно
источник

ПК

Побитый Кирпич in pro.cxx
Гарантии ты строишь себе сам (см. контрактное программирование)
источник

O

Ofee in pro.cxx
Побитый Кирпич
С++ в принципе сложный, это не оправдание. В msvc с EHsc флагом такие try catch тупо вырежутся, например
Я не спорю, просто это не значит, что стоит сложные вещи пронизывать через всю кодовую базу. Сырые указатели уже заменили умными, которые позволяют скрыть часть сложности работы с указателями. Возможно, что-то подобное должно произойти и с исключениями
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
Побитый Кирпич
strict aliasing выпиливает лишние обращения к памяти, этого достаточно чтобы дать большой буст (это не считая того что меньше инструкций)
код, покажи код. и ассемблер
источник

N?

Nikolay ? in pro.cxx
Так можно долго говорить, ИМХО налицо непонимание, покажите код, где эксепшены неудобны
источник

N?

Nikolay ? in pro.cxx
Ofee
Я не спорю, просто это не значит, что стоит сложные вещи пронизывать через всю кодовую базу. Сырые указатели уже заменили умными, которые позволяют скрыть часть сложности работы с указателями. Возможно, что-то подобное должно произойти и с исключениями
Вот всё ровно наоборот, именно коды возврата всё пронизывают, а эксепшены делают код чистым
источник

PK

Pavel Kazakov in pro.cxx
Nikolay ?
Вот всё ровно наоборот, именно коды возврата всё пронизывают, а эксепшены делают код чистым
источник

PK

Pavel Kazakov in pro.cxx
и ревью замедляют :) если ими упарываться
источник

O

Ofee in pro.cxx
Побитый Кирпич
send_message может внутри ждать и убеждаться в доставке, это не важно
Я немного о другом, ждёт-то он асинхронно? Если да, то куда и кому он бросит исключение? Я действительно не знаю, как правильно готовить исключения, на практике я видел лишь плохие примеры их применения. Но видел Qt, который практически нигде и ничего не бросает, работать оказалось куда комфортнее

Тут, кажется, кроме личного выбора ничего больше нет, ибо нет серебрянной пули в данном вопросе, я считаю, что оба способа имеют недостатки, но с недостатками возвращаемых значений мне мириться проще. Возможно, мне просто ближе стиль ФП, так что продолжать спор не буду
источник

N?

Nikolay ? in pro.cxx
Обернул свой вызов или целый блок логики использующий EvaluateSalaryAndReturnName и всё
источник

ПК

Побитый Кирпич in pro.cxx
Ofee
Я немного о другом, ждёт-то он асинхронно? Если да, то куда и кому он бросит исключение? Я действительно не знаю, как правильно готовить исключения, на практике я видел лишь плохие примеры их применения. Но видел Qt, который практически нигде и ничего не бросает, работать оказалось куда комфортнее

Тут, кажется, кроме личного выбора ничего больше нет, ибо нет серебрянной пули в данном вопросе, я считаю, что оба способа имеют недостатки, но с недостатками возвращаемых значений мне мириться проще. Возможно, мне просто ближе стиль ФП, так что продолжать спор не буду
Ждёт синхронно, сам вызов синхронный
источник

N?

Nikolay ? in pro.cxx
И мне просто интересно как вот каждый из пунктов выглядит с кодами возврата )
источник

ПК

Побитый Кирпич in pro.cxx
В асинхронном там в зависимости от архитектуры. На сопрограммах, например, можно сделать исключения, если на колбеках и boost asio, то там error_code-ы
источник

ПК

Побитый Кирпич in pro.cxx
Ofee
Я немного о другом, ждёт-то он асинхронно? Если да, то куда и кому он бросит исключение? Я действительно не знаю, как правильно готовить исключения, на практике я видел лишь плохие примеры их применения. Но видел Qt, который практически нигде и ничего не бросает, работать оказалось куда комфортнее

Тут, кажется, кроме личного выбора ничего больше нет, ибо нет серебрянной пули в данном вопросе, я считаю, что оба способа имеют недостатки, но с недостатками возвращаемых значений мне мириться проще. Возможно, мне просто ближе стиль ФП, так что продолжать спор не буду
Рассматривай throw как возвращаемое значение и будет тебе ФП полноценное)
источник