Optimize away immediately-called delegate literals?

Nick Sabalausky a at a.a
Mon Mar 12 20:10:58 PDT 2012


"Brad Roberts" <braddr at puremagic.com> wrote in message 
news:mailman.582.1331607753.4860.digitalmars-d at puremagic.com...
> On 3/12/2012 4:15 PM, Peter Alexander wrote:
>> On Sunday, 11 March 2012 at 06:49:27 UTC, H. S. Teoh wrote:
>>> On Sun, Mar 11, 2012 at 01:29:01AM -0500, Nick Sabalausky wrote:
>>>> Suppose you have a delegate literal and immediately call it:
>>>>
>>>> auto a = x + (){ doStuff(); return y; }() + z;
>>>>
>>>> Does DMD ever (or always?) optimize away a delegate if it's executed
>>>> immediately and never stored into a variable? If not, can it, and
>>>> would it be a simple change? Is something like this already on the
>>>> table?
>>> [...]
>>>
>>> I've always wondered about whether delegates passed to opApply ever get
>>> inlined.
>>
>> Don't wonder. Find out!
>>
>> import std.stdio;
>> void doStuff() { writeln("Howdy!"); }
>> void main() {
>>     int x = 1, y = 2, z = 3;
>>     auto a = x + (){ doStuff(); return y; }() + z;
>>     writeln(a);
>> }
>
> See also: bug 4440
>
> The patch in there, if it hasn't bit rotten to badly (I suspect it has) 
> will handle _this_ case.  But almost no other
> case of inlining delegates.
>
> It'd be a good area for someone who wants an interesting and non-trivial 
> problem to dig into.  It wouldn't touch all
> that much of the codebase as the inliner is fairly self-contained.  At 
> least, that's what I recall from when I looked at
> this stuff a couple years ago.
>

Do you think that patch would be a good starting place for further work, or 
would a proper solution likely necessitate an entirely different approach?




More information about the Digitalmars-d mailing list