pure-ifying my code
Jonathan M Davis
jmdavisProg at gmx.com
Mon Nov 18 11:51:46 PST 2013
On Monday, November 18, 2013 19:16:11 Daniel Davidson wrote:
> On Sunday, 17 November 2013 at 10:56:16 UTC, Jonathan M Davis
>
> wrote:
> > I think that the typical approach at this point is to just drop
> > purity for the
> > moment, but if you want you really want it, you are indeed
> > going to have to
> > implement it yourself. But we'll get there with Phobos
> > eventually. The primary
> > holdup is some compiler improvements, and we'll get them. It's
> > just a question
> > of when.
> >
> > - Jonathan M Davis
>
> Why is it that compiler improvements are the holdup? Honest
> question. Is it more that the approach taken for the specific
> implementation went beyond the capabilities of the compiler at
> the time (like its inferencing capabilities)? Maybe purity was
> not a focus at the time of writing a lot of phobos and there are
> not loads of testing on it where purity was a factor.
Attribute inferrence was added to the language specifically in order to make it
possible for pure, nothrow, and @safe to work with templates and therefore
make it possible to use them with Phobos. Without it, they don't, because
you're stuck either requiring a specific set of attributes (limiting what the
templates work with) or duplicating the templates with different combinations
of attributes. We got enough attribute inferrence to reduce the problem, but
the feature has yet to be implemented enough to fully fix the problem. It's
compiler improvements which made using pure with std.algorithm possible at
all.
> If so,
> isn't an alternative implementation now an improvement over
> waiting for the compiler updates. A corollary question would be
> are the benefits of Voldermort types in phobos worth the purity
> issues they cause?
Voldemort types are just part of the problem. Attribute inferrence is just
plain too primitive right now, and really needs to be improved. The problem is
reduced if you don't used Voldemort types, but it's not fixed.
> Noble goal - maybe. But maybe not as noble as users' efforts to
> realize benefits of purity now. Purity/const/immutable when
> broken spread virally.
It's also the case that none of that has ever worked with pure, so we haven't
lost anything. We just haven't yet gained what we should have gained. But the
push really needs to be to improve the compiler IMHO, because without that,
attribute inferrence in general just isn't going to be good enough, and if
Phobos' current situation highlights how poor the attribute inferrence is, all
the better, because that puts more pressure on getting it fixed.
Some of the newer functions have not used Voldemort types in order to fix
similar problems, but I don't think that it's worth going and changing them
all just to work around a problem with the compiler. The compiler needs to be
fixed. At best, what you're talking about doing is contorting Phobos'
implementation in order to make it work better with the half-implemented
feature of attribute inferrence, but since it's that feature that makes it
possible at all, and it really needs to be fully implemented regardless, it
makes by far the most sense IMHO to just finish implementing it. But when that
happens is up to the compiler devs, and at this point, I'm a library dev, not
a compiler dev.
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list