On 28 November 2012 12:50, Marius Gundersen <[email protected]> wrote: > Has there been any work done on pure functions in EcmaScript? The way I > imagine it, there would be a way to indicate that a function should be pure > (by using a symbol or a new keyword, although I understand new keywords > aren't terribly popular). The pure function is not allowed to access any > variable outside its own scope. Any access to a variable outside the scope > of the function would result in a Reference Error, with an indication that > the reference attempt was made from a pure function. This also applies to > any function called from within the pure function. The entire stack of a > pure function must be pure. This also means the pure function cannot access > the [this] object. Only the parameters passed to the function can be used > in the calculation. > > The syntax could be something like this (the @ indicates that it is pure): > > function sum@(a, b){ > return a+b; > } > > var sum = function@(a, b){ > return a+b; > }
A couple of comments. First, your definition of "pure" is not quite correct. Any function that even _returns_ locally created state in some form (i.e., a new object), is impure. Second, due to the extremely impure nature of JavaScript, there aren't many useful pure functions you could even write. For example, your 'sum' function is not pure, because the implicit conversions required by + can cause arbitrary side effects. Last, short of a static type-and-effect system, I don't see how the necessary checks could be implemented without imposing significant overhead on almost every primitive operation -- because every function, and hence almost any piece of code, might potentially end up with a "pure" function in its call chain, and would need to check for that. /Andreas _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

