C#'s conditional attributes

Walter Bright newshound2 at digitalmars.com
Mon Jul 12 11:10:27 PDT 2010


Andrei Alexandrescu wrote:
> Just saw this on reddit:
> 
> http://www.reddit.com/r/programming/comments/cocww/little_known_c_feature_conditional_attributes/ 
> 
> 
> and was wondering whether this can be done in D by relying on lazy 
> parameters and the inliner. Here's the test bed:
> 
> void log(A...)(lazy string format, lazy A objects)
> {
> }
> 
> void main(string args[])
> {
>     log(args[0] ~ "yah", args ~ args, 42 + args.length);
> }
> 
> The dependency on args is intended to prevent the optimizer from 
> hoisting evaluation to compilation time.
> 
> In an ideal world, the compiler should generate lambdas for the three 
> expressions, pass them to log(), then inline, figure out there's no 
> really use of either lambda, and let them vanish.
> 
> Indeed that's quite what happens when compiling with -O -inline 
> -release. The generated _Dmain is the same as a baseline with an empty 
> main(). Once this is in place, a simple version() selector dispatches to 
> either the empty log() above or one that actually logs stuff. Useful to 
> know.

What's wrong with:

     version (Whatever) void log(args) { ... }
     else void log(args) {}


More information about the Digitalmars-d mailing list