[OT] Apple introduces Swift as Objective-C sucessor
ponce via Digitalmars-d
digitalmars-d at puremagic.com
Tue Jun 3 01:33:12 PDT 2014
On Tuesday, 3 June 2014 at 00:57:53 UTC, Chris Cain wrote:
> On Monday, 2 June 2014 at 23:01:56 UTC, deadalnix wrote:
>> On Monday, 2 June 2014 at 22:53:10 UTC, ponce wrote:
>>> - no exceptions (!)
>>
>> How do they do error handling ?
>
> I haven't read too much into Swift but languages with ADTs,
> pattern matching, and no exceptions can (and usually do) return
> using an ADT looking something like (pseudocode):
>
> adt Outcome(T) {
> Error(ErrorType e);
> Success(T result);
> }
>
> and then for a "try catch" type block, you do things with
> switches
>
> switch(http.getResponse(someServer)) {
> case Success(r):
> // ... use r
> case Error(http.error.Http404(msg)):
> // handle the 404 error
> case Error(e):
> return Error(e); // Let the caller handle it
> }
>
> Or some other similar construct. With macros you can easily
> write something that tries to get the outcome's success and if
> it can't, then it automagically returns the error for you,
> throwing the error to the calling function like you expect from
> exceptions. That said, if you're paying attention you'll see
> the similarity to checked exceptions...
>
> So basically, those two features give you what is effectively
> exception handling, "nothrow", and so on. It's one of those
> really powerful language features with a lot of leverage that
> makes it easy to define constructs in the language instead of
> the compiler.
Ocaml and Haskell also have ADT and exhaustive matching.
Yet Ocaml provides exceptions. Haskell provide the Exception
monad to avoid littering the code with error-checking.
Of course ADT are great and all but if error checking is verbose
it won't encourage people to check for errors.
More information about the Digitalmars-d
mailing list