jhull at gbis.com
Mon Dec 7 03:29:19 CST 2015
For context, I just read this thread (that happened before I joined) which discusses the idea of having a variant of arithmetic which can throw on overflow:
I wonder if having a variant of ‘throws’ might allow this... ‘throws!’ would act exactly like throws, but it could be called without ‘try’ (resulting in a crash if it tries to throw). Basically, any statement calling a function/operation with throws! would have the equivalent of an implicit ‘try!' unless there is an actual ‘try’.
It would allow the following (assuming + is marked ‘throws!’):
let x = 2 + 3 // No crash, No exception
let y = try Int.max + 1 // Exception, but no crash
let z = Int.max + 1 // Crash!
let w = try? Int.max + 1 // nil
Similarly, the thread mentions the desire for a throwing forced unwrap operator, and I think this allows that as well. Assuming the force unwrap operator is marked 'throws!’:
let x:Int? = nil
let y = try x! // Exception, but no crash
let z = x! // Crash!
Anyway, this is all of the top of my head, so I am sure there is some issue I am missing. I am not entirely sure that this would allow more good than evil overall, but I do like that the ! in ‘throws!’ signifies danger. In the cases above, it is being used to take something which already crashes now, and allow the programmer to catch an exception instead of that crash if they think to look for it.
More information about the swift-evolution