C++ Logo

STD-DISCUSSION

Advanced search

Subject: Re: [important] C++ Zero-Overhead exception proposal
From: Florian Weimer (fweimer_at_[hidden])
Date: 2020-10-19 01:55:27


* Denis Kotov via Std-Discussion:

> This code:
> ```cpp
> Subscription subscribe() throws SubscriptionError;
>
> Subscription subscribe() throws {
> ...
> throw SubscriptionError{"Error", Payload};
> ...
> }
> ```
> translates to:
> ```cpp
> struct SubscribeResult {
> Subscription res;
> SubscriptionError err;
> };
>
> SubscribeResult subscribe();
>
> SubscribeResult subscribe() {
> ...
> return SubscribeResult{ .err = SubscriptionError{"Error", Payload} };
> ...
> }
> ```

Not that requires ABI work on many architectures in order to avoid
regressions when Subscription can be returned directly in a register,
but SubscribeResult cannot. Quite a few ABIs always return structs in
memory, or pack multiple fields into a single register (optimizing for
the case where the caller stores the result to the final place, rather
than unpacking it immediately, as it would with inline exception
handling).

There is a reason why the present scheme based on unwinding has been
called "zero-cost exception handling", too.

Thanks,
Florian

-- 
Red Hat GmbH, https://de.redhat.com/ , Registered seat: Grasbrunn,
Commercial register: Amtsgericht Muenchen, HRB 153243,
Managing Directors: Charles Cachera, Brian Klemm, Laurie Krebs, Michael O'Neill

STD-DISCUSSION list run by std-discussion-owner@lists.isocpp.org

Older Archives on Google Groups