compile-time explicitness

Steven Schveighoffer schveiguy at yahoo.com
Fri Sep 23 12:14:09 PDT 2011


On Fri, 23 Sep 2011 14:47:32 -0400, Gor F. Gyolchanyan  
<gor.f.gyolchanyan at gmail.com> wrote:

> Of course, if the entire D gets CTFE-able, the __ctfe will be completely  
> useless.
> But i can't see that coming for a long time.

Well, anywhere that it makes sense, it should be CTFE-able.

For example to!string(int) should be CTFE-able, as well as to!int(string)

I think a really cool CTFE feature would be if sort could be used in  
compile time.  Imagine writing a lookup table in whatever order you want,  
then just using:

enum lookupTable = sorted(lookupData);

I can think of a few places that would have been useful in my past.

Places where __ctfe is useful are functions that depend on opaque runtime  
functions.  Then you can write alternatives.  Again, I'll refer you to  
std.array.Appender.

> Most of the major programming
> problems are best solved with classes and that's where CTFE stops.

I'm not sure everybody agrees on that.  Classes are good for certain  
things, and horrible for others.

> About templates:
>
> void unpackIntoFunction(alias arrayOfVariants, alias func)()
> {
>    // you can't generate the necessary mixin strings right here, because  
> it won't
> be compile-time.
>    // you need to create a separate function, that returns the required  
> string to
> be mixed in.
>    mixin(whatIJustGenerated);
> }

enum + static if signifies compile time.  If you want to use the  
compile-time constructs, you can build it at compile-time.  Otherwise, you  
can either use eponymous templates (functional style) or CTFE-able  
functions (imperative style).

A more complete example will allow better explanation.

-Steve


More information about the Digitalmars-d mailing list