Why callers should explicitly document storage classes

Jonathan M Davis jmdavisProg at gmx.com
Sun Aug 14 14:30:39 PDT 2011


On Sunday, August 14, 2011 23:20:12 Timon Gehr wrote:
> On 08/14/2011 10:36 PM, Jonathan M Davis wrote:
> > On Sunday, August 14, 2011 22:25:36 Timon Gehr wrote:
> >> On 08/14/2011 10:00 PM, Vladimir Panteleev wrote:
> >>> On Sun, 14 Aug 2011 22:48:18 +0300, Timon Gehr<timon.gehr at gmx.ch>  
wrote:
> >>>> requiring lazy before lazy arguments basically destroys the reason
> >>>> for
> >>>> lazy being in the language:
> >>>> 
> >>>> int foo(lazy 2*3);
> >>>> 
> >>>> is not better than
> >>>> 
> >>>> int foo({return 2*3});
> >>> 
> >>> What about requiring "lazy" only for non-pure delegates?
> >> 
> >> Actually I would rather require lazy arguments to be pure, so that
> >> they
> >> can be guaranteed to be executed at most once.
> > 
> > That still wouldn't be guaranteed, since pure function calls are only
> > optimized out if they're strongly pure and in the same expression. You
> > can't rely on calls to pure functions being optimized.
> > 
> > - Jonathan M Davis
> 
> My point was, that if lazy arguments were required to be pure, such a
> thing _could_ then be guaranteed independently from optimizations that
> may or may not take place on general pure functions.

Yes. In theory. It would depend on what Walter was willing to do with the 
language and the compiler though. At present, pure is purely an optimization 
and not use to affect semantics at all.

However, I'd actually argue that lazy delegates should be effectively treated 
as pure anyway. Conceptually, what you're doing is delaying the execution of 
the expression in case it isn't needed. I don't see any reason why the end 
result should be any different from passing a non-lazy argument. As such, the 
lazy argument should only be called once regardless. It wouldn't surprise me 
at all if the implementation doesn't work that way, but I'd argue that it 
should regardless of purity. From the standpoint of the function, the lazy 
argument is just like any other argument in terms of its value, and IMHO it 
should be treated that way.

- Jonathan M Davis


More information about the Digitalmars-d mailing list