Size: a a a

2020 March 18

PK

Pavel Kazakov in pro.cxx
Vyacheslav Olkhovchenkov
Ша? Сначала продергиваем ub как компилятор имеет право творить что хочет, а потом называем ub все где можно залппить оптимазацию но надо отбросить частные случаи
так, к очередному раунду битвы я тоже не готов)) это напотом можно оставить
источник

ПК

Побитый Кирпич in pro.cxx
Vyacheslav Olkhovchenkov
Ша? Сначала продергиваем ub как компилятор имеет право творить что хочет, а потом называем ub все где можно залппить оптимазацию но надо отбросить частные случаи
Засчёт этого С++ быстрый, да
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
Да не сильно быстрее чем без этого
источник

ПК

Побитый Кирпич in pro.cxx
Vyacheslav Olkhovchenkov
Да не сильно быстрее чем без этого
У тебя и замеры есть, да?
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
А то так непонятно? Если просто все ub перевести в id то окажется очень нпмного случаев когда такая оптимизация дает выйгрышь, причем на современных архитектурах - выйгрышь минимальный, на фоне всей программы - вообще незаметный. Но ты можешь опроверг меня кодом, это проще чем наоборот
источник

O

Ofee in pro.cxx
Pavel Kazakov
"Zero-overhead deterministic exceptions: Throwing values"
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0709r0.pdf
У меня складывается ощущение, что это решение, которое потребует позже решать проблемы этого решения...

Имхо, проблема производительности — не самое страшное лично для меня, хуже в исключениях то, что когда ты работаешь с кодом, кидающим исключения, тебе нужно обкладываться try/catch на каждый чих, увеличивая цикломатическую сложность кода и каждый раз ожидать, что где-то что-то поймал не там, где было нужно. Добавляя кучу разных способов кидать и ловить исключения, мы только усложняем будущую поддержку кодовых баз/компиляторов/языка
источник

N?

Nikolay ? in pro.cxx
Ofee
У меня складывается ощущение, что это решение, которое потребует позже решать проблемы этого решения...

Имхо, проблема производительности — не самое страшное лично для меня, хуже в исключениях то, что когда ты работаешь с кодом, кидающим исключения, тебе нужно обкладываться try/catch на каждый чих, увеличивая цикломатическую сложность кода и каждый раз ожидать, что где-то что-то поймал не там, где было нужно. Добавляя кучу разных способов кидать и ловить исключения, мы только усложняем будущую поддержку кодовых баз/компиляторов/языка
Вроде бы как строго наоборот всё, и это если работать с возвращаемыми кодами ошибок или всякими GetLastError, errno и прочим, необходимо проверки вставлять собственноручно и после каждой строки
источник

ПК

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

PK

Pavel Kazakov in pro.cxx
Ofee
У меня складывается ощущение, что это решение, которое потребует позже решать проблемы этого решения...

Имхо, проблема производительности — не самое страшное лично для меня, хуже в исключениях то, что когда ты работаешь с кодом, кидающим исключения, тебе нужно обкладываться try/catch на каждый чих, увеличивая цикломатическую сложность кода и каждый раз ожидать, что где-то что-то поймал не там, где было нужно. Добавляя кучу разных способов кидать и ловить исключения, мы только усложняем будущую поддержку кодовых баз/компиляторов/языка
хороший поинт
источник

ПК

Побитый Кирпич in pro.cxx
Побитый Кирпич
strict aliasing выпиливает лишние обращения к памяти, этого достаточно чтобы дать большой буст (это не считая того что меньше инструкций)
А ведь это одна из любимых граблей всяких сишников которые думают что float* можно спокойно кастовать в Int*  :)
источник

PK

Pavel Kazakov in pro.cxx
... но вообще должно быть сильно лучше, Чем сейчас
источник

ПК

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

Имхо, проблема производительности — не самое страшное лично для меня, хуже в исключениях то, что когда ты работаешь с кодом, кидающим исключения, тебе нужно обкладываться try/catch на каждый чих, увеличивая цикломатическую сложность кода и каждый раз ожидать, что где-то что-то поймал не там, где было нужно. Добавляя кучу разных способов кидать и ловить исключения, мы только усложняем будущую поддержку кодовых баз/компиляторов/языка
Это неправильный подход, не надо всё обкладывать в try catch
источник

O

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

Я где-то видел, как некоторые даже C-библиотеки оборачивали в try/catch, просто не желая разбираться, где можно себе ноги отстрелить, а где нельзя. Наличие непредсказуемости просто вызывает у разработчика апатию и нежелание хоть как-то обрабатывать, потому что это банальное состояние неопределённости, где неизвестно, куда делать следующий шаг, в результате это выливается в снижение качества если не самого кода (уже достижение!), то в снижение качества уведомлений об ошибках точно
источник

N?

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

Я где-то видел, как некоторые даже C-библиотеки оборачивали в try/catch, просто не желая разбираться, где можно себе ноги отстрелить, а где нельзя. Наличие непредсказуемости просто вызывает у разработчика апатию и нежелание хоть как-то обрабатывать, потому что это банальное состояние неопределённости, где неизвестно, куда делать следующий шаг, в результате это выливается в снижение качества если не самого кода (уже достижение!), то в снижение качества уведомлений об ошибках точно
Я дал тебе  библиотеку из 20 функций которые возвращают int, и кода который их использует из 40 вызовов этих функций, где именно проверять ошибки и как?
источник

K

Konstantin in pro.cxx
Помимо try/catch нужно ещё всё оборачивать в RAII, это вообще-то тоже вымораживает. А ещё надо каким-то образом убедиться в том, что деструктор не испускает исключений. И при этом не совсем понятно, в чём вообще исключения улучшают жизнь
источник

ПК

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

Я где-то видел, как некоторые даже C-библиотеки оборачивали в try/catch, просто не желая разбираться, где можно себе ноги отстрелить, а где нельзя. Наличие непредсказуемости просто вызывает у разработчика апатию и нежелание хоть как-то обрабатывать, потому что это банальное состояние неопределённости, где неизвестно, куда делать следующий шаг, в результате это выливается в снижение качества если не самого кода (уже достижение!), то в снижение качества уведомлений об ошибках точно
> мы можем проверять ошибки ровно там, где они реально могут возникнуть

То же самое с исключениями

>  можем даже требовать проверять возвращаемое значение

Нет, это как раз минус кодов возврата, а вот с исключениями такого нет

> приходится заботиться, а может ли тут возникнуть исключение

Об этом вообще не нужно думать если ты не в гугл. Ты не понимаешь просто как надо юзать исключения правильно
источник

ПК

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

Я где-то видел, как некоторые даже C-библиотеки оборачивали в try/catch, просто не желая разбираться, где можно себе ноги отстрелить, а где нельзя. Наличие непредсказуемости просто вызывает у разработчика апатию и нежелание хоть как-то обрабатывать, потому что это банальное состояние неопределённости, где неизвестно, куда делать следующий шаг, в результате это выливается в снижение качества если не самого кода (уже достижение!), то в снижение качества уведомлений об ошибках точно
Из С библиотек не может вылететь исключение, иначе это гавно библиотека
источник

N?

Nikolay ? in pro.cxx
>"Ты не понимаешь просто как надо юзать исключения правильно"
Именно так
источник

O

Ofee in pro.cxx
Побитый Кирпич
Это неправильный подход, не надо всё обкладывать в try catch
Так а что делать, если хочется хоть какой-то определённости и уверенности в вызываемом коде? А если я не хочу при первом же исключении прерывать ход вычислений, я хочу как можно дольше продолжать обработку, пока это вообще возможно, чтобы показать, например, наиболее подробный лог.

Вообще, я видел TRY(error), сделанный на корутинах, кажется, что с выходом 20 стандарта, это будет первое, что я попробую)
источник

K

Konstantin in pro.cxx
Побитый Кирпич
Из С библиотек не может вылететь исключение, иначе это гавно библиотека
А как насчёт си-библиотек, которые вызывают твои функции по указателям?
источник