dmd 2.029 release

Don nospam at nospam.com
Tue Apr 21 11:56:01 PDT 2009


bearophile wrote:
> Don:
>> Yes. Actually, marking a nested function as pure doesn't make much sense.
>> It's entirely equivalent to moving it outside the function; [...]
>> I'm not sure that nested pure member functions should be legal.
> 
> It's not fully equivalent to moving it out of the function because once you pull it out you add a name to the outer namespace: nested functions are useful to keep namespaces tidy too.
> So I'd like to have nested pure functions too.
> 
> pure int foo(int y) { return y + y; } // outer foo
> pure void bar(int x) {
>   pure int foo(int y) { return y * y; }
>   return foo(x) * .foo(x);
> }
> 
> Thank you,
> bye,
> bearophile

That's true, but it seems quite difficult to get right. A pure nested 
function can in theory access immutable members in the outer function -- 
but must not access the parameters of the outer function.
If there are no immutable members in the outer function, the compiler 
would ideally convert it into an external pure function, so that it
doesn't need a frame pointer to the outer function. But it would need 
error messages for any use of mutable outer function members. Etc.
It seems quite a lot of work for something of very limited use.
Making it into a external, private pure function is almost the same.




More information about the Digitalmars-d-announce mailing list