pure-ifying my code

Kenji Hara k.hara.pg at gmail.com
Wed Nov 20 01:20:35 PST 2013


On Monday, 18 November 2013 at 19:52:42 UTC, Jonathan M Davis 
wrote:
> 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


I opened a new pull request to fix the compiler issue.

https://github.com/D-Programming-Language/dmd/pull/2832

Kenji Hara


More information about the Digitalmars-d-learn mailing list