> On Feb 27, 2017, at 2:08 PM, Matthew Johnson <matt...@anandabits.com> wrote:
> 
>> 
>> On Feb 27, 2017, at 1:46 PM, David Waite via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>> Add more layers, and it can be very mysterious why a call failed. Java at 
>> least captures stack traces in this case to aid in technical support in 
>> diagnosing the error.
>> 
>> Wrapping exceptions also prevents an aggregate of errors from different 
>> subsystems being handled as a category, such as having a catch block handle 
>> RecoverableError generically
>> 
>> An interesting solution that has emerged in Ruby to keep library authors 
>> from wrapping exceptions is by decorating the existing exception. Exceptions 
>> are caught via pattern matching (same as in Swift), so rather than wrap an 
>> extension, they extend the error instance with a library-specific module 
>> (e.g. swift protocol). So while the error may be a IOError in ruby, you can 
>> still catch it via ‘rescue JSONError’
> 
> If I understand this correctly it sounds like introducing a library would 
> create protocols to categorize errors and add retroactive conformances to 
> these protocols for errors thrown by its dependencies?  That is an 
> interesting approach.  But it requires knowing the concrete types of the 
> possible errors all the way down the stack (you can’t add a conformance to an 
> existential).  This seems very problematic to me, especially in a language 
> where creating new error types is as easy as it is in Swift.

I believe it is something that even Objective C can’t do; extend a single 
instance of a type to support a protocol.

You can still do really interesting things with categories of errors, such as 
extend existing types to support a protocol, and putting categorization logic 
on third party errors yourself.

That breaks though if every library does

struct MyError: Error {
   let innerError: Error
}

in order to have a typed throw. 

> Error handling is messy, there’s no doubt about that.  I would like to have 
> as many tools at my disposal as possible.  Error types is one of those tools.

I’m still trying to mentally put together the elevator pitch for typed throws. 
How do I explain to new/junior developers and developers coming from other 
languages when to do typed throws, and when not to?

-DW

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to