Temporarily disable all purity for debug prints

spir denis.spir at gmail.com
Mon Apr 11 15:10:52 PDT 2011


On 04/11/2011 11:27 PM, bearophile wrote:
>  From what I am seeing, in a D2 program if I have many (tens or more) pure functions that call to each other, and I want to add (or activate) a printf/writeln inside one (or few) of those functions to debug it, I may need to temporarily comment out the "pure" attribute of many functions (because printing can't be allowed in pure functions).
>
> As more and more D2 functions become pure in my code and in Phobos, something like a -disablepure compiler switch (and printf/writeln inside debug{}) may allow more handy debugging with prints (if the purity is well managed by the compiler then I think disabling the pure attributes doesn't change the program output).

Similar to Adam's idea, I'd like a debug-only func, maybe called 'note' 
(because 'log' is too ambiguous). 'log' could do the same thing as writeln;
or even better:

     void f (int n) {
         note(n*n);
         ...
     }
     f(3); // writes: "n*n: 9\n"

Meaning, no need to explicitely type:

         note("n*n: ", n*n);

This indeed requires some compiler magic. For simplicity, note could be 
non-variadic (--> one note per line, both in code and on output).

In any case, the point is for note to be considered pure, because 
debug-output-only. And would not be compiled in -release mode. (nice 
side-effect: debug output statements can then stay in code as are)

Denis
-- 
_________________
vita es estrany
spir.wikidot.com



More information about the Digitalmars-d mailing list