On Tue, Apr 21, 2009 at 8:56 PM, Don <[email protected]> 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. > > >
why not just make it a static pure nested function? or is that no longer proper D2 ?
