DConf 2014 Keynote: High Performance Code Using D by Walter Bright
bearophile via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Sun Jul 20 05:57:55 PDT 2014
Andrei Alexandrescu:
> Just read the slides, very interesting.
There are many papers, books and articles around that explain the
same things, but that explanation is easy to understand even for
people not used to functional programming (as I still partially
am).
> I think it would be interesting to experiment with an
> Expected!T that holds an Algebraic!(T, Exception) as state,
In those slides as other member of the sum type they have used an
enumeration of possible error conditions (or at first even just
strings of the error messages), sometimes augmented with more
information, like:
| EmailNotValid of EmailAddress
| DbAuthorizationError of ConnectionString * Credentials
| SmtpTimeout of SmtpConnection
| SmtpBadRecipient of EmailAddress
> template bind(alias fun) { ... }
>
> such that given a function e.g.
>
> int fun(string a, double b);
>
> bind!fun is this function:
>
> Expected!int bind!fun(Expected!string a, Expected!double b) {
> if (a.sux || b.sux) return composeExceptions(a, b);
> return fun(a.rox, b.rox);
> }
>
> There would also be bindNothrow:
>
> Expected!int bindNothrow!fun(Expected!string a, Expected!double
> b) {
> if (a.sux || b.sux) return composeExceptions(a, b);
> try return fun(a.rox, b.rox);
> catch (Exception e) return e;
> }
One of the main points of using those two railways is to avoid
exceptions.
>> but of course built-in tuple syntax and basic forms of pattern
>> matching
>> in switch (https://d.puremagic.com/issues/show_bug.cgi?id=596
>> ) improve
>> the syntax and make the code more handy, handy enough to push
>> more D
>> programmers in using it.
>
> No :o).
Are you saying you don't want built-in tuples and that you also
don't agree with the proposal in issue 596 and that you don't
agree that a better syntax doesn't make monads like those
actually handy to use? I don't understand what's controversial in
what I have written there.
From a syntax point of view issue 596 asks for an optional
onMatch method, and if you want a syntax to create variables in
switch cases. Plus support for structs and classes as variables
to switch on.
The use of Algebraic, Nullable and Expected is very different
(and safer) if you use them through pattern matching. The point
is not to ape the functional languages: currently in D Nullable
is not much safer (and not more handy) than using a null pointer.
Bye,
bearophile
More information about the Digitalmars-d-announce
mailing list