Proposal: Relax rules for 'pure'

Tomek Sowiński just at ask.me
Thu Sep 23 14:08:25 PDT 2010


Don napisał:

> You're operating with a different definition. There are actually three
> levels. For extra clarity, let's split strongly-pure into two:
> 
> immutably pure == all parameters are immutable
> const pure == all parameters are const
> weakly pure == no access to globals
> 
> The interestingly thing is that an immutably pure function can safely
> call a weakly-pure function. The only things the weakly pure function
> will be able to change, are variables which are local to the immutably
> pure functions.
> 
> The only difference between weakly pure and immutably pure is the
> guarantees which are made about the parameters. And this is already
> covered by the const modifiers in the function signature. So that
> concept doesn't actually need to be part of pure.

Good stuff. Separating restriction on globals and on parameters opens the door for 
compiler-enforced guarantees on a much wider range of cases.

> Note that this is possible only because immutable and const are
> transitive. It wouldn't be possible with head-const, or logical const.

But it would be possible with tail const. Quite a few functions could be made immutably 
pure if it meant tail immutability of their parameters. One example are manipulations of 
ranges on immutable structures.

> Transitive const gives us an absolutely huge win.

I can't agree more.

-- 
Tomek


More information about the Digitalmars-d mailing list