DConf 2014 Keynote: High Performance Code Using D by Walter Bright
Andrei Alexandrescu via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Sat Jul 19 11:37:38 PDT 2014
On 7/16/14, 3:22 AM, bearophile wrote:
> Andrei Alexandrescu:
>> http://www.reddit.com/r/programming/comments/2aruaf/dconf_2014_keynote_high_performance_code_using_d/
>>
>
> Despite Walter is used to "pipeline programming", so the next step is to
> also handle failures and off-band messages in a functional way (without
> exceptions and global error values) with two "parallel pipelines", here
> named "Railway-Oriented Programming". This is one of the simplest
> introductions (and he can skip the slides 19-53) that I have found of
> this topic (that in the Haskell community is explained on the base of
> monads):
>
> http://www.slideshare.net/ScottWlaschin/railway-oriented-programming
Just read the slides, very interesting. I think it would be interesting
to experiment with an Expected!T that holds an Algebraic!(T, Exception)
as state, and a template like this (warning no slides no understanding,
this is very sketchy):
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;
}
> In Bugzilla there are already requests for some Railway-Oriented
> Programming:
>
> https://issues.dlang.org/show_bug.cgi?id=6840
Nice, but I think we need Expected!T in addition to Nullable!T.
> https://issues.dlang.org/show_bug.cgi?id=6843
This is not good; trying to see if conversion would succeed is almost as
much work as doing it. We need a
Expected!To tryTo(From, To)(From source);
which produces the error but doesn't throw it.
> I think no language extensions are needed for such kind of programming,
Agreed.
> 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).
> For some examples of those things in a system language, this page shows
> some little examples of functional syntax for Rust:
> http://science.raphael.poss.name/rust-for-functional-programmers.html
We, too, could use a couple of full-time library designers on the roster...
Andrei
More information about the Digitalmars-d-announce
mailing list