The const functions proposal isn't about referential transparency. They still
encapsulate mutable state. What makes them "const" are the frozen property
table (recall that functions in ES are objects) and the local name that's bound
to the function.
Dave
On Apr 17, 2011, at 1:06 AM, Claus Reinke wrote:
> Short version:
>
> Javascript closures bind their free variables by reference;
> what does that mean for const functions?
>
> Consider extreme cases like this (is this currently permitted?)
>
> var real_f;
> const f() { return real_f(); }
>
> This make me wonder what it means for a function to be constant
> in Javascript - constant wrt l-values is not constant. Or is "freezing"
> of constant functions meant to include de-referencing free variables[*]?
>
> And if freezing would evaluate/de-reference free variables, how
> would that interfere with programming patterns? For instance,
> it might help for some common patterns
>
> for(var i=0; i<length; i++) {
> .. const() { .. i ..} // is this i by value, or by reference?
> }
>
> but it would rule out use of const functions in patterns that depend
> on free by-reference variables
>
> var counter=0;
> function inc() { return counter++; } // could we use const here?
>
> Is such a distinction intended for Javascript [*]? It isn't obvious
> to me from the current spec[1].
>
> Claus
>
> [1] http://wiki.ecmascript.org/doku.php?id=strawman:const_functions
>
> [*] Apparently, CPL had two forms of function definitions, one
> which takes its free variables by l-value (as in Javascript)
> and one which takes its free variables by r-value (which we
> have to emulate in Javascript by wrapping the closure in an
> immediately applied function, eg, for closures having loop
> indices as free variables).
>
> This is discussed, eg, in section 3.4.3 ("Modes of free
> variables") of Strachey's lecture notes "Fundamental
> concepts in programming languages", International
> Summer School in Computer Programming
> at Copenhagen in August, 1967
>
> http://scholar.google.de/scholar?cluster=7825706085193370698&hl=de&as_sdt=0&as_vis=1
>
> Btw, this also has the earliest discussion of l- and r-values
> I am aware of, including the beginnings of conversion
> rules (when to de-reference an l-value, and when to pass
> the l-value unchanged, eg, in a conditional expression).
> Might be of interest to those thinking about References
> in the Javascript spec:
>
> https://mail.mozilla.org/pipermail/es-discuss/2011-April/013692.html
>
>
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss