Pure functions in EcmaScript

Jussi Kalliokoski jussi.kalliokoski at gmail.com
Wed Nov 28 06:17:51 PST 2012

On Wed, Nov 28, 2012 at 3:47 PM, Marius Gundersen <gundersen at gmail.com>wrote:

> On Wed, Nov 28, 2012 at 1:21 PM, David Bruant <bruant.d at gmail.com> wrote:
>>  Hi Marius,
>> I won't say the idea is bad, but what would be the benefit of this new
>> type of function?
>> From experience on this list, if a new idea cannot prove to make a major
>> difference with what currently exists, it is not considered to be added to
>> the ES6 spec.
>> The major difference can be in performance, security, language
>> extensibility, programming idioms/conveniences, etc.
>> Do you have reasons to think pure functions as you propose them make that
>> big of an improvement as opposed to JS as it is?
> With many new functional programming possibilities (like map, reduce,
> filter, lambdas) there are many scenarios where the implementer should use
> pure (or as I renamed it in another reply, side-effect-free) functions.
> Library implementers are likely interested in making functions that can
> take lambdas as parameters, and these lambdas (in many cases) should not
> alter any outside state, they should only return a value. A function with
> this restriction could run faster and take up less memory since it only
> needs the values passed to it as arguments in its own scope.
> Mostly I feel this would introduce better coding practises with a focus on
> functional programming rather than object oriented programming. Using
> functions with limited scope would reduce the number of variables written
> to the global scope, and would reduce the amount of state in an
> application. Seeing as FP is a bit of a trend today (due, in part, to the
> popularity of JavaScript), it seems to me like a good idea to implementing
> features which help promote good FP patterns in a language that allows for
> both FP and OOP.

With pure function, are you after

a) The equivalent of `inline` in the C family?
b) Something less state-independent, a function that could be, for example,
parallelized/forked safely?

For a), I'm not sure to which extent implementations already do this. For
b), seems like something related to the RiverTrail project.


> David
>> Le 28/11/2012 12:50, Marius Gundersen a écrit :
>> 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;
>> }
>> Marius Gundersen
>> _______________________________________________
>> es-discuss mailing listes-discuss at mozilla.orghttps://mail.mozilla.org/listinfo/es-discuss
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20121128/4a47da8a/attachment.html>

More information about the es-discuss mailing list