4 ms·
What would you do? If the ordinary array subscript produced an optional value, people would simply fall into the habit of force-unwrapping it, since the hassle
by zoul 8y ago
What would you do? If the ordinary array subscript produced an optional value, people would simply fall into the habit of force-unwrapping it, since the hassle of handling the spreading optionals would be too big. And throwing an unchecked exception would lead to empty catch blocks everywhere, just as in Java. And then the execution would continue in God only knows what state. I simply don’t think that the type system can solve the question of trusting your dependencies for you.
- fauigerzigerk 8y agoWhat I want to do is to wrap a piece of code running in its own thread in a catch block so I can respond gracefully to any errors without killing the entire process. What gracefully means depends entirely on the application. Often it means to log the error or display a meaningful error message if it's an interactive app, then maybe do other kinds of cleanup and shut the thread down. It can also mean to retry later. Array out of bounds errors are quite often just a result of not properly handling an earlier temporary error. Whether or not errors leave the rest of the application in an inconsistent state depends entirely on the design of the application. I'm not saying that letting an app crash on buggy code is never the right thing to do. I just want the option to handle it differently where appropriate and possible (it's not always possible anyway).
- zoul 8y agoYou might be interested in this: https://gist.github.com/lattner/31ed37682ef1576b16bca1432ea9f782 https://gist.github.com/lattner/31ed37682ef1576b16bca1432ea9... Speaking of reliable systems, introducing an actor model is a good opportunity and excuse to introduce a mechanism for handling and partially recovering from runtime failures (like failed force-unwrap operations, out-of-bounds array accesses, etc). We explore several options that are possible to implement and make a recommendation that we think will be a good for UI and server applications. This looks like a more principled approach that we will eventually get in Swift.
- fauigerzigerk 8y agoSounds pretty vague, but at least he acknowledges the issue.
- zoul 8y agoThere’s plenty of details: https://gist.github.com/lattner/31ed37682ef1576b16bca1432ea9f782#part-3-reliability-through-fault-isolation https://gist.github.com/lattner/31ed37682ef1576b16bca1432ea9... https://github.com/apple/swift/blob/master/docs/ErrorHandlingRationale.rst https://github.com/apple/swift/blob/master/docs/ErrorHandlin...
- fauigerzigerk 8y agoSo essentially they plan to terminate the actor instead of the whole process. I think that would be a very good thing.