Templates vs CTFE

Robert Clipsham robert at octarineparrot.com
Thu Jan 6 11:28:40 PST 2011


On 06/01/11 17:49, Max Samukha wrote:
> Some of us who have the knack of writing metaprograms in D know that
> many algorithms can be implemented with both recursive templates and
> CTFE. A simple example is map:
>
> Recursive template instantiation:
>
> template staticMap(alias pred, A...)
> {
> static if (A.length)
> alias TypeTuple!(pred!(A[0]), staticMap!(A[1..$])) staticMap;
> }
>
> CTFE:
>
> template staticMap(alias pred, A)
> {
> mixin("alias TypeTuple!(" ~ _staticMap(A.length) ~ ") staticMap;");
> }
>
> private string _staticMap(size_t len)
> {
> string result;
> if (len)
> {
> result ~= "pred!(A[0])";
> for(size_t i = 1, i < len; ++i)
> {
> result ~= ", pred!(A[" ~ to!string(i) ~ "])";
> }
> }
> return result;
> }
>
> It is not easy to decide which approach to implement in a library
> because both have drawbacks.
>
> Can anybody give informed advice as to which one is preferable in
> practice? Or should a library provide both?

Put each of those implementations in its own file, then call it several 
times. Look at the binary size for each implementation, also run 
`strings ctfeTest` if you're on a *nix. This should give you your answer :)

-- 
Robert
http://octarineparrot.com/


More information about the Digitalmars-d mailing list