My first email to Walter, ever

Peter Alexander peter.alexander.au at gmail.com
Sun Jul 7 05:27:01 PDT 2013


On Sunday, 7 July 2013 at 03:03:03 UTC, Andrei Alexandrescu wrote:
> Terrible. If you have conditionals, iteration, functions, and 
> objects
> in D's straight programming support, you should have 
> conditionals,
> iteration, functions, and objects in D's metalanguage.

:-(

template allSatisfy(alias F, T...)
{
     static if (T.length == 0)
     {
         enum allSatisfy = true;
     }
     else static if (T.length == 1)
     {
         enum allSatisfy = F!(T[0]);
     }
     else
     {
         enum allSatisfy =
             allSatisfy!(F, T[ 0  .. $/2]) &&
             allSatisfy!(F, T[$/2 ..  $ ]);
     }
}

Still looks like half-assed functional programming to me.

Where's the iteration? Why can't I write this?

template allSatisfy(alias F, T...) {
     foreach(t; T)
         if (!F!(t))
             return false;
     return true;
}

(Those are rhetorical questions btw, before anyone links me to a 
D tutorial).

We're almost there with CTFE, but CTFE can only run functions 
that could run at runtime. In a crazy world where types were 
first class objects, stuff like this would be feasible. Or 
perhaps we just need a compile-time metalanguage that allows 
things like this to be run with CTFE?


More information about the Digitalmars-d-announce mailing list