История изменений
Исправление alysnix, (текущая версия) :
Пока err не известно конвеер продвинуться не может, но в современных процессорах это нивелируется спекулятивными вычислениями. И вполне возможна ситуация что простой вызов
во коней пришпорил. куда тебя понесло, какие еще конвейеры и спекулятивные вычисления. просто посмотри уже как генерится код throw. вне зависимости от языка.
throw - это финализация всех вложенных блоков и нахождения того охватывающего блока, где находится хандлер которому можно передать обьект сгенеренной ошибки. выполнение идет по стеку вверх, закрывая все блоки, пока не встретит нужный хандлер обработки ошибки. хандлер обработки делается компилятором из блоков catch. они толкаются на стек хандлеров в начале блока try. а потом выкидываются оттуда.
то есть в оформлении оператора try-catch происходят такие вещи - код толкания текущего хадлера обработки ошибки в стек или список(зависит от реализации), код выталкивания хандлера(в конце блока try), код самих хандлеров, код сравнения сигнатуры или еще чего ошибки в сигнатурой хандлера.
то есть кот такая вот куча мала делается только для того чтобы какой-то шнырь типа «избавился от копипасты».
але. кто знает, как оно работает никогда не будет смешивать эксепшены и возврат ошибок из функций обычным способом. потому что это разные механизмы и для разных целей.
Исходная версия alysnix, :
Пока err не известно конвеер продвинуться не может, но в современных процессорах это нивелируется спекулятивными вычислениями. И вполне возможна ситуация что простой вызов
во коней пришпорил. куда тебя понесло, какие еще конвейеры и спекулятивные вычисления. просто посмотри уже как генерится код throw. вне зависимости от языка.
throw - это финализация всех вложенных блоков и нахождения того охватывающего блока, где находится хандлер которому можно передать обьект сгенеренной ошибки. выполнение идет по стеку вверх, закрывая все блоки, пока не встретит нужный хандлер обработки ошибки. хандлер обработки делается компилятором из блоков catch. она толкаются на стек хандлеров в начале блока try. а потом выкидываются оттуда.
то есть в оформлении оператора try-catch происходят такие вещи - код толкания текущего хадлера обработки ошибки в стек или список(зависит от реализации), код выталкивания хандлера(в конце блока try), код самих хандлеров, код сравнения сигнатуры или еще чего ошибки в сигнатурой хандлера.
то есть кот такая вот куча мала делается только для того чтобы какой-то шнырь типа «избавился от копипасты».
але. кто знает, как оно работает никогда не будет смешивать эксепшены и возврат ошибок из функций обычным способом. потому что это разные механизмы и для разных целей.