On Sat, 06 Nov 2010 13:09:07 +0100 Lutger <[email protected]> wrote:
> Vladimir Panteleev wrote: > > > A while ago, someone added an example with pure functions to Wikipedia's > > D article: > > > > http://en.wikipedia.org/wiki/D_(programming_language)#Functional > > > > Someone on the talk page asked why does the program compile despite that > > mySum accesses a variable in its enclosing function: > > > > > http://en.wikipedia.org/wiki/Talk:D_(programming_language)#Purity_of_mySum_function_in_the_.22Functional.22_section_.281.1.4.29 > > > > I replied with: > > > >> The code indeed compiles. I think that the idea is that nested functions > >> have a hidden argument - a pointer to their enclosing scope (main's > >> local variables). However, that doesn't explain why the code continues > >> to compile when pivot is moved outside main(), or if you add a call to a > >> non-pure function in mySum - these sound like compiler bugs. > > > > I don't know much about purity, so I thought someone could shed some > > light on this? > > > > I think the wikipedia example is wrong and that it compiles is related to > these bugs: > > http://d.puremagic.com/issues/show_bug.cgi?id=5006 > http://d.puremagic.com/issues/show_bug.cgi?id=4640 > > if mysum is instead declared in this way as suggested by bug 4640 dmd does > give an error: > > int mysum(int a, int b) pure ... > > Error: pure nested function 'mysum' cannot access mutable data 'pivot' Yes, for sure. Otherwise what is "pure" supposed to mean? Denis -- -- -- -- -- -- -- vit esse estrany ☣ spir.wikidot.com
