Eliminate assert and lazy from D?

Don nospam at nospam.com
Tue Oct 13 05:24:53 PDT 2009


Andrei Alexandrescu wrote:
> Right now, the language has enough power to express assert as a library 
> function, as opposed to a primitive construct. (See e.g. enforce.) I 
> think it would be good to relegate assert to object.d.
> 
> This also brings up "lazy", which seems to be quite botched. Are there 
> suggestions on how to replicate its functionality in a different way? I 
> even seem to recall lazy was discussed as a disadvantage in the recent 
> dialog on reddit, see
> 
> http://www.reddit.com/r/programming/comments/9qf8i/i_wrote_some_d_today_and_its_completely_blowing/ 
> 
> 
> I personally believe it's useful to be able to pass an unevaluated 
> expression into a function, for example assert and enforce themselves 
> use that.
> 
> But let's open this for discussion: should assert and/or lazy be 
> removed? If not, why not? It yes, why? How can we replicate their 
> functionality?
> 
> 
> Andrei

assert: should remain. It is important to the compiler. I can easily 
imagine it participating in range checking.
uint x = whatever();
assert(x<100);
ubyte b = x;  // This implicit conversion is OK; we know x is in the 
appropriate range.

lazy: should be removed.
It seems to me that 'lazy' covers just a single use case for macros.



More information about the Digitalmars-d mailing list