Wikipedia purity example and discussion

spir denis.spir at gmail.com
Sat Nov 6 12:38:08 PDT 2010


On Sat, 06 Nov 2010 13:09:07 +0100
Lutger <lutger.blijdestijn at gmail.com> 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



More information about the Digitalmars-d mailing list