Array!T and find are slow

Steven Schveighoffer via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri May 16 08:51:31 PDT 2014


On Fri, 16 May 2014 11:36:44 -0400, Jonathan M Davis via  
Digitalmars-d-learn <digitalmars-d-learn at puremagic.com> wrote:

> On Thu, 15 May 2014 08:04:59 -0300
> Ary Borenszweig via Digitalmars-d-learn
> <digitalmars-d-learn at puremagic.com> wrote:
>
>> Isn't there a way in D to just expand:
>>
>> enforce(cond, "failure");
>>
>> (or something with a similar syntax) to this, at compile-time:
>>
>> if(!cond) throw new Exception("failure");
>>
>> I thought D could do this, so enforce should do this instead of using
>> lazy arguments.
>
> No. enforce is a function, and the only other things that it could be  
> with
> that syntax would be other callables (e.g. a lambda, delegate, or  
> functor).

I think it *could* optimize properly, and that would be an amazing  
improvement to the compiler, if someone wants to implement that.

Essentially, you need to be able to inline enforce (not a problem since  
it's a template), and then deduce that the lazy calls can just be moved to  
where they are used, in this case, only once.

This would make a logging library even better too.

-Steve


More information about the Digitalmars-d-learn mailing list