On Wed, Jul 10, 2013 at 10:12 PM, Allen Wirfs-Brock
<[email protected]> wrote:
>
> On Jul 10, 2013, at 6:06 PM, Sam Tobin-Hochstadt wrote:
>
>> On Wed, Jul 10, 2013 at 8:02 PM, Allen Wirfs-Brock
>> <[email protected]> wrote:
>>>
>>> On Jul 10, 2013, at 4:40 PM, Sam Tobin-Hochstadt wrote:
>>>
>>>> On Wed, Jul 10, 2013 at 7:24 PM, Rick Waldron <[email protected]> 
>>>> wrote:
>>>>>
>>>>> It gets created nowhere,
>>>>
>>>> This is right.
>>>>
>>>>> because the body of a module is implicitly strict,
>>>>
>>>> And this is right.
>>>>
>>>>> so the above code produces a Reference Error.
>>>>
>>>> But this is incorrect, because modules check that their bodies don't
>>>> have free variables, so the above code has a _static_ error.
>>>
>>> Ah, do you mean this is a link time check?
>>>
>>> It isn't a regular early error situations because gvar could be a 
>>> dynamically added property on the global object.
>>>
>>> Not sure what your current semantics are, but I thought it was established 
>>> a long time ago that modules needed free references in order to deal with 
>>> global object properties.
>>
>> No, that's not what I mean.  The semantics we've discussed multiple
>> times are that modules are compiled with respect to the global object
>> at compilation time, and free variables at that point (ie, compilation
>> time) are a static error.  This is implicit in the discussion here:
>> http://wiki.ecmascript.org/doku.php?id=harmony:module_loaders (see the
>> "global objects" section) and explicit in some of the notes, I'm sure.
>
> Hmm..has this been thought about in light of the decision to structure the 
> global scope into to environment records (a object ER for the global object 
> (and var/function declarations) and a declarative ER for let/consts, etc.)

Yes, we've thought about this.  I don't think it changes much, other
than to make the case Mark worried about less prevalent.

> Also, aren't free references (to globals) quite similar to imports that can't 
> be satisfied at link time.   I can imagine that such free variables could be  
> treated as implicit imports from the global scope and resolved at the same 
> time and in a similar manner to explicit imports.  There is something that 
> seems more satisfying about all "linking" errors occurring at the same time 
> rather than some occurring as early errors and others occurring as linking 
> errors.

I believe that this may end up being a distinction without a
difference. When a module is compiled, the names it imports from other
modules must be present, or there's a static error.  There's no case
where a module is compiled-but-not-linked, and thus I don't think the
difference would be observable.

> Finally, are there races between an async script block that define modules 
> and subsequent html elements  with id attributes.  If such a module uses a 
> free global reference to access the DOM node with the matching id won't the 
> occurrence of the compile time error depend upon whether or not the the async 
> script loader gets around to compiler the the script before the html parser 
> gets to the element with the id?

There are certainly races here, just the way that:

    <script async>
    x
    </script>

races with such dynamic DOM insertions.

Sam
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to