[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