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