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