On Apr 29, 2010, at 4:18 PM, Mark S. Miller wrote:
Second, +1 on "#" as a short way to define closures, whether they
are simply replacing the "function" keyword or introducing a genuine
lambda.
The ƒ fans are still strong, so we'll have to run a txt-your-vote
dancing with the stars elimination round ;-)>
Third, given the first two, +1 on "#" reviving lambda, with Dave's
same "=>" replacing the notion of completion value within the lambda
body.
This goes beyond what we've agreed to, though -- TCP making return in
your example return from the outer function (which you didn't show
fully):
arr.forEach(#(ev) {
// ...
if (pred(el)) { return el; }
// ...
});
I'm not sure everyone on es-discuss groks this. You're supposing the
above is in a function, and the return el forces control flow to
return from that outer function. Full example:
function findElementSatisfyingPredicateWhileDoingOtherStuff(arr, pred) {
arr.forEach(#(el) {
// ...
if (pred(el)) return el;
// ...
});
return null;
}
We discussed this on the list. Maciej argued strongly against TCP as
maximum good that trumps other considerations:
https://mail.mozilla.org/pipermail/es-discuss/2008-December/008390.html
Quoting his words:
"So return from a lambda is sometimes but not always a runtime error?
Other times it can return through multiple levels of function calls
without raising an exception? That seems pretty bad for ease of
understanding and for performance of implementations. If you do this:
[1 2 3].map(lambda (x) { return x + 1; })
I think it would be better for that to be a syntax error than to make
the containing function return 2.
It seems to me the current design prioritizes lambda as a desugaring
construct or building block for imperative-style control flow, over
use as an actual first-class function. I assume break and continue
inside a lambda have similar issues."
--- end quote ---
Then you replied:
https://mail.mozilla.org/pipermail/es-discuss/2008-December/008391.html
And Allen agreed:
https://mail.mozilla.org/pipermail/es-discuss/2008-December/008392.html
Quoting Allen: "In which case perhaps we should abandon this style of
lambda and work harder at developing a concise construct that is a
reformed function."
The explicit completion value here-syntax in Dave's let expression
proposal does not address all the concerns from this end-of-2008
lambda thread. We can't keep going around on this. I'm all in favor of
shorthand for function, but TC39 virtually dropped lambda. Do we
really need to revive it (and return to label, and probably other
things we probably can't afford)?
/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss