Lazy eval

kris foo at bar.com
Mon Aug 21 15:01:45 PDT 2006


Frank Benoit wrote:
>>I agree with you that replacing exp with { return exp; } is clear and
>>not much additional typing. But I've discovered over and over to my
>>surprise that the additional typing causes people to not realize that D
>>has that capability. The extra typing simply kills it.
> 
> 
> I use the { return ...; } very much. And I like it very much. And I
> fully agree that the return..; is annoying, because if often use it for
> a search criteria or something like that. The syntax { singlestatement }
> would be pretty cool. But leaving the braces completely out it terrible.
> And {} is really not too much to type.
> 
> Imagine the terrible bugs that will occur with that. I think one of the
> biggest advantages of D vs. C++ is the readability. That is so
> important. Really. Please don't destroy that.


I think the new sugar works really well where the code in question is 
*designed* around the notion of callbacks. The cues are already solidly 
in place at that point, so it may be less of an issue there? I'm 
thinking specifically of the logging examples, and some fairly advanced 
distributed processing paradigms.

However, in typical or 'mixed' D programming, the lack of cues in this 
latest sugar will surely become problematic. Walter suggests the author 
of the callee should use an appropriate name, such that overloading 
would (presumeably) not be an issue and the appropriate cues would be 
retained. One has to wonder if that is a good idea or not.

If it were possible to make the '{' '}' optional, for example, then 
another option would be for the coder to "make the call" as to how 
readable/explicit the code actually is. This is typical the case anyway, 
since any coder can write obfuscated code regardless of the language :)

The question is then "how much different is it to add or omit the 
'return' keyword?" ... personally, I think it makes a big difference; so 
does Walter, apparently. Thus, if we had a choice of writing these three 
options:


# int i;
# somefunk (++i);
#
# or
#
# somefunk ({++i});
#
# or
#
# somefunk (return {++i;});

I think the later should be dropped, and the former two supported :)










More information about the Digitalmars-d mailing list