Proposal: Relax rules for 'pure'
Tomek Sowiński
just at ask.me
Thu Sep 23 13:24:20 PDT 2010
Michel Fortin napisał:
> The interesting thing with this change is that you can now call
> mutators functions on the local variables inside the pure function,
> because those can be made pure. You can't even iterate over a range
> inside a pure function without this!
>
> pure int test() {
> int result;
> auto r = iota(0, 10);
> while (!r.empty) {
> result += r;
> r.popFront(); // can't be pure by current rules!
> }
> return result;
> }
It's because popFront() can't be made pure. It could be if there was @tail immutable in the
language -- pure functions would mark their arguments with @tail immutable instead of
immutable. That allows popFront() to advance the range.
I wrote about it before but the idea didn't catch on:
http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=11
6475
--
Tomek
More information about the Digitalmars-d
mailing list