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
lazy is a great feature of D, although you need some sort of usage
convention to not get confused with it.
For example, there is no way to tell a parameter is lazy from a function
call, you need to look at the prototype. But the same can be said with
ref and out too so if you remove lazy you also need to rethink these two.
I therefore made myself a simple convention on how I use lazy: if the
value is evaluated only once I use lazy, otherwise I use a delegate.
This makes it clear from the call context what I'm doing.
Sometimes I use lazy for values evaluated multiple times (I did it in
the json module i posted to D.announce) when the method is private
because I'm too lazy (pun intended) to write a full delegate.
Jeremie