On Saturday, September 8, 2012 at 4:01 PM, Allen Wirfs-Brock wrote:

> This is the first of probably several semantic issues WRT generator that will 
> need to be resolved in the spec.
> 
> Here is the user level issue:
> 
> let thrower = {throw () {throw "exception"}};
> function * G(arg = thrower.throw()) {
>    //possibly other explicit initialization code which could also throw
>    yield arg;
> }
> let g = G();   //do we see "exception" here?  (loc 1)
> ... //possibly many lines of code
> g.next();       //or do we see it here (loc 2)
> 

If this weren't a generator, we'd see the exception at loc1, correct? Looking 
at your example, before I read further, I would assume loc 1

Rick
 
> 
> The generator proposal [1] doesn't really address this issue.  It assumes [2] 
> that an environment record with the parameter bindings can be created and 
> captured at loc 1 without triggering any exceptions and it defers 
> instantiation and execution of all of the generator's code body until the 
> first "next" call.  However, the semantics of parameter default value 
> initialization can result in exceptions and more closely links argument 
> instantiations with the actual activation of the generator function. You 
> can't really build the parameter bindings without performing declaration 
> instantiation for the function.
> 
> Arguably, exceptions involving initialization of the the parameter would be 
> more meaningful at loc 1  (loc 2 could be very remote and in somebody else's 
> code). However, the body of the generator may contain other explicit 
> initialization code and there really is no way to identify and move 
> evaluation of that code (and its possible exceptions) to loc 1. So, even if 
> parameter initialization exceptions are made observable at loc 1 there may 
> still be other logical initialization-related exceptions that will onlybe  
> observable at loc 2. 
> 
> Which semantics do we want?  Deferring parameter initialization to loc 2 may 
> be somewhat simpler from a specification perspective.  It's hard to say which 
> would have bigger implementation impact.
> 
> Allen
> 
> [1]: http://wiki.ecmascript.org/doku.php?id=harmony:generators
> [2]: http://wiki.ecmascript.org/doku.php?id=harmony:generators#calling 
> 
> _______________________________________________
> 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

Reply via email to