Compile time code paths

Jeremie Pelletier jeremiep at gmail.com
Tue Aug 11 09:16:11 PDT 2009


Don Wrote:

> Jeremie Pelletier wrote:
> > David Gileadi Wrote:
> > 
> >> Daniel Keep wrote:
> >>> Jeremie Pelletier wrote:
> >>>> If a function has both an asm and D implementations inside its body, and the D version can be executed at compile time, but the asm one is much faster at runtime. Is it possible to have the compiler use the D code path at compile time (ie to fill in enums and whatnot), and have the asm version available at runtime.
> >>> Not that I know of.  There's no way to switch based on run time/compile
> >>> time.  This was going to be solved, at least in part, using static
> >>> arguments, but that got dropped.
> >>>
> >>> As it stands, you just have to use a suffix or prefix or something to
> >>> distinguish CTFE methods from runtime methods.
> >> Is this a case for version(CompileTime){}?
> > 
> > No because it would also compile this block into the binary. 
> 
> I think something like this might work:
> 
> static if (__traits(CompileTime)) {
>     ... // ctfe code
> } else {
>     asm {
>       ...
>     }
> }
> 
> Not sure what the exact syntax should be.

Good idea, I agree with the use of __traits here. The syntax looks great to me as it is.



More information about the Digitalmars-d mailing list