return when desugaring to closures
dhtmlkitchen at gmail.com
Tue Sep 2 14:48:50 PDT 2008
On Tue, Sep 2, 2008 at 2:16 PM, Lex Spoon <spoon at google.com> wrote:
> On Sun, Aug 24, 2008 at 3:17 AM, Brendan Eich <brendan at mozilla.org> wrote:
>> First, let's settle the hash over whether any desugaring without
>> extensions such as return-to-label, reformed lexical scope, tamed
>> this, banished arguments, etc. etc., trumps adding a new binding
>> form, to wit: let as block scoped var.
> With no extensions, it is true, return would end up returning from a
> different method under the proposed rewrite. Likewise, this and
> arguments would cause trouble. Possibly break and continue would,
> depending on what their precise semantics are.
Wouldn't any Completion Type cause problems?
Wouldn't the caller, stack, et c, be all messed up?
> However, they work under some specific extensions that appear to
> return expressions and nested functions will eventually want a way to
> return from other than the innermost function. More generally, it
> would be really nice if programmers could safely add a nested function
> without losing access to important things from their surrounding
> scope. That goes not just for return, but also arguments, this,
> break, and continue.
Those are not lost if you store them in a variable in the containing scope.
It wouldn't make sense to have - return: outerFunction - because the
outer function might not have been the caller. In fact, it probably
won't be in the majority of cases.
> It's an orthoganality problem. With
> trouble when they try to use both function nesting and return at the
> same time. Using one feature makes it harder to use the other.
I've never wanted to do that; to make the inner function make the
outer function return.
> Finally, there was a little bit of question about what the semantics
> would be. Let me go into just a little more detail. The idea is that
> instead of just "return foo", you could also put a label on the
What would you use that for?
More information about the Es-discuss