Inferring Purity Woes

Xinok via Digitalmars-d digitalmars-d at puremagic.com
Fri May 15 19:30:50 PDT 2015


I've been avoiding purity in D for a while but I decided to take 
a stab at it today. I encountered two issues which make inferring 
purity difficult.


(1) While the compiler infers purity for instantiated functions, 
it's unable to infer purity for "functions within templates". 
Consider the following three statements:

void foo()(){ }
template T(){  void foo()(){ }  }
template T(){  void foo(){ }  }

The compiler can infer purity for the first two statements but 
not the third. So even though the functions are within a 
template, you still have to make each individual function an 
"instantiated function" in order to infer purity for them.

I think the compiler should infer purity for all functions, but 
adding support for functions within templates would be good 
enough. Otherwise, you end up with a lot of syntactic noise by 
adding empty parenthesis to all of these function declarations 
without any clear reason why they're even there.


(2) When the compiler fails to infer purity, it prints an error 
"pure function [] cannot call impure function []". However, it 
fails to tell you where the impurity occurs. So if you have a 
series of "instantiated functions" spanning thousands of lines of 
code, you have to manually sift through all of that code to find 
the impurity.


Are there any bug reports for these two issues? I tried searching 
but couldn't find anything.


More information about the Digitalmars-d mailing list