Size: a a a

2020 July 29

ПК

Побитый Кирпич... in pro.cxx
Apache DOG™
континьюэйшны и гринтреды?
Да
источник

m

magras in pro.cxx
Андрей Руссков
там есть хитрый нюанс - из-за дополнительного landing pad'а под исключения компилятор не может применить многие оптимизации
Только коды возврата никак не улучшают ситуацию. Там будет if (err) return err;, который задизейблит те же оптимизации. Я считаю, что тот доклад был очень интересным, но лукавым.
источник

АР

Андрей Руссков... in pro.cxx
например, функции, кидающие исключения, почти никогда не инлайнятся. В твоем примере с if инлайнинг произойдет на раз два
источник

АР

Андрей Руссков... in pro.cxx
(предполагая что вызванная функция не слишком большая офк)
источник

AD

Apache DOG™ in pro.cxx
magras
Только коды возврата никак не улучшают ситуацию. Там будет if (err) return err;, который задизейблит те же оптимизации. Я считаю, что тот доклад был очень интересным, но лукавым.
так или иначе когда у тебя есть ошибка, ксть 2 варианта, она случится, или нет. Так или иначе нужно ветвление, и как тут не крути ветвление будет, где его совать это вопрос почти что вкуса
источник

m

magras in pro.cxx
Андрей Руссков
например, функции, кидающие исключения, почти никогда не инлайнятся. В твоем примере с if инлайнинг произойдет на раз два
О_о
У меня они прекрасно инлайнятся.
источник

АР

Андрей Руссков... in pro.cxx
там в докладе было перечислено как минимум несколько сценариев где ломаются оптимизации
источник

АР

Андрей Руссков... in pro.cxx
Apache DOG™
так или иначе когда у тебя есть ошибка, ксть 2 варианта, она случится, или нет. Так или иначе нужно ветвление, и как тут не крути ветвление будет, где его совать это вопрос почти что вкуса
не совсем. С исключением один if - бросить его или нет. А с кодами тебе надо проверять является ли результат ошибочным во всем стеке вызовов
источник

DP

Denis Paukaev in pro.cxx
это да, исключения не zero const, как многие считают )
источник

DP

Denis Paukaev in pro.cxx
но коды возврата имхо ещё хуже
источник

AD

Apache DOG™ in pro.cxx
Андрей Руссков
не совсем. С исключением один if - бросить его или нет. А с кодами тебе надо проверять является ли результат ошибочным во всем стеке вызовов
if(is_oshibka(state)) и там и там, в разных местах.
источник

DP

Denis Paukaev in pro.cxx
смотришь как они там в Go изгаляются, ну такое
источник

AD

Apache DOG™ in pro.cxx
в го сделали хорошо, не надо.
источник

m

magras in pro.cxx
Apache DOG™
так или иначе когда у тебя есть ошибка, ксть 2 варианта, она случится, или нет. Так или иначе нужно ветвление, и как тут не крути ветвление будет, где его совать это вопрос почти что вкуса
Разница в том, что в одном случае код обработки ошибки всегда будет в кеше инструкций, потому что он всегда заинлайнен. В случае исключений он будет в конце функции. Кроме того при нормальной реализации исключений там нет ветвления. Просто идем в табличку, по текущему ip находим landing pad и прыгаем туда.
источник

АР

Андрей Руссков... in pro.cxx
Apache DOG™
if(is_oshibka(state)) и там и там, в разных местах.
"во всем стеке вызовов" значит, что когда foo вызывает bar, который вызывает baz, в случае с исключениями if будет только в baz
источник

DP

Denis Paukaev in pro.cxx
Apache DOG™
в го сделали хорошо, не надо.
20 ифов на функцию?
источник

AD

Apache DOG™ in pro.cxx
Denis Paukaev
20 ифов на функцию?
ну это они просто не доделали
источник

AD

Apache DOG™ in pro.cxx
но сама идея чекеда хороша
источник

AD

Apache DOG™ in pro.cxx
реализации в основном хреновые, в скалке с 3 версией появится хорошая в плане UX
источник

DP

Denis Paukaev in pro.cxx
Apache DOG™
ну это они просто не доделали
а есть по вашему вариант где уже сейчас хорошо?
источник