On Thursday, 7 January 2021 at 10:36:39 UTC, Jacob Carlborg wrote:

Swift can throw anything that implements the Error protocol. Classes, structs and enums can implement protocols.


True, Swift can throw anything what implements the Error protocol. It seems the error protocol itself doesn't define any constraints how an error has to look like.

I'm contemplating if this is a good idea, maybe, I don't know yet.

Some platforms implement C++ exception using longjmp, for example, iOS.

Interesting, I've heard some OSes don't support exception tables, therefore an alternate implementation have to be chosen.

It's claimed that exceptions are not zero cost, even when an exception is not thrown. Because the compiler cannot optimize functions that may throw as well as those that cannot throw.

Did you refer to the case a pure function is inlined into the caller and the machinery of stack pointer decrementation doesn't work anymore?

You may be right about that. However, I think it can be transformed safely in case the source code is still available.

In case of dyn libs, we may, can develop a machinery to gather exception table information at compile time and to manipulate them in order to inline them safely, but I don't know about the case in D though.

Reply via email to