dmd 2.029 release
Don
nospam at nospam.com
Wed Apr 22 13:10:20 PDT 2009
Don wrote:
> 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.
>
>
Actually it's not so difficult. I've created a patch for bug 2807 --
it's only 5 lines long! It gives an error message if a nested pure
function accesses a mutable variable from an outer scope.
More information about the Digitalmars-d-announce
mailing list