return when desugaring to closures

Brendan Eich brendan at mozilla.org
Thu Oct 9 14:31:58 PDT 2008


On Sep 2, 2008, at 2:16 PM, Lex Spoon 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.

Sorry for the very tardy reply. You make good points in the abstract,  
and the messy language-specific details of existing semantics for  
functions not being clean enough deserves a better response than just  
"don't desugar".

I stand by "don't desugar let to functions as-is". I'm also pretty  
certain "don't add more modes or subsets to try to fix existing forms"  
is sound, since versionitis does not  help us either keep the spec  
simple or specify the backward-compatible semantics in the full  
language.

So, to avoid trouble, we've been thinking of new forms including a  
better function, call it lambda, that has none of the compatibility  
baggage. I say "we" but really Dave Herman deserves credit for  
championing this. A "lambda" form has been a topic now and then for a  
while, on this list and in committee, and sometimes only as syntactic  
sugar (which would miss the opportunity for semantic reform) -- yet  
without it getting the breathing room it needs.

Dave is working now in the

http://wiki.ecmascript.org/doku.php?id=strawman:strawman

space on the wiki. Don't throw stones, this is not in the harmony:  
namespace for good reason. Constructive comments welcome. And I still  
owe the list a story on wiki access that keeps Ecma happy and doesn't  
throw open the edit wars doors.

Among the new strawman pages, the following are relevant and (I hope)  
helpful:

http://wiki.ecmascript.org/doku.php?id=strawman:lambdas
http://wiki.ecmascript.org/doku.php?id=strawman:lexical_scope
http://wiki.ecmascript.org/doku.php?id=strawman:return_to_label

> Possibly break and continue would,
> depending on what their precise semantics are.

JS has break from labeled statement, and continue to labeled loop  
bottom, a la Java. These look trouble-free to me. Let me know if you  
see a hard case. Thanks,

/be


More information about the Es-discuss mailing list