Le 28/11/2012 14:47, Marius Gundersen a écrit :
On Wed, Nov 28, 2012 at 1:21 PM, David Bruant <[email protected] <mailto:[email protected]>> 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.
Why "should"? What is the problem if people don't?

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.
"could run faster and take up less memory". I agree it "could", but it's not given it will when implemented. In some cases, it's possible to prove that a function is side-effect free, but to the best of my knowledge, no implementations has gone to length to do such thing, probably, because the cost is too big in regard to the benefits.

Mostly I feel this would introduce better coding practises with a focus on functional programming rather than object oriented programming.
I'm only half sympathic to this argument. JS is a language with many users with different programming styles. I understand the benefits of FP, but don't see why it should be favored over any other style.

Using functions with limited scope would reduce the number of variables written to the global scope
I use both OOP and FP styles and I don't see how FP would help for global variables. Basically, declaring variables as function local (with the "var" keyword) prevent global leaks.

and would reduce the amount of state in an application.
...and increase the use of temporary values and GC to compensate, because JS engines are not really written to optimize for FP? For instance, I think, none do tail call optimization yet? (others in the list know better on that point)

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.
You mentioned ReferenceError when the functions tries to reach a variable outside of its scope. I think it's possible to implement such a thing in current JavaScript. Take a look at the Caja code [1] for inspiration (sorry the barrier is a bit high as I put it. Ask me questions if you need help). Also, to avoid being tempted to use a scope, just define your function as non-nested (global :-s or directly inside an IIFE (Immediately Invoked Function Expression))

Just a note:
    function@ f(x){
        x.a = 1;
    }
I think this is a side-effect. Should an error be thrown here too?
If so, does it mean you can't use objects as arguments?


In any case, none of what you answered really convinces me (just to clarify, I just hang out on the list, I make no decisions with regard to the language) as being a major improvement for the language. It would be a good convenience for FP style, that's it.

David

[1] http://code.google.com/p/google-caja/source/browse/trunk/src/com/google/caja/ses/startSES.js#635
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to