<div dir="ltr">here we are trying to achieve this:<div><br></div><div><div style="font-size:12.8px">```js</div><div style="font-size:12.8px"><div>import { x, y } as foo from "foo";</div><div>import { x, y } as bar from "bar";</div><div><br></div><div>// so that we have</div><div>foo.x();</div><div>foo.y();</div><div><br></div><div>// and bar </div><div>bar.x();</div><div>bar.y();</div><div><br></div><div>// but NO x, y in scope</div></div><div style="font-size:12.8px">```</div></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">if you export x and y in scope you gotta have conflicts/clashes, which if I understand correctly, is exactly what this idea is trying to avoid.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Dec 15, 2017 at 11:42 AM, Isiah Meadows <span dir="ltr"><<a href="mailto:isiahmeadows@gmail.com" target="_blank">isiahmeadows@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Yes, but how would that be any different from what you'd have to deal<br>
with normally?<br>
<br>
To clarify, I was basically proposing exposing both the MNSEO with all<br>
export members (like `* as foo`) as well as live bindings from the<br>
module, separately. Something along the lines of a combination of the<br>
two.<br>
<br>
FYI, this is what Haskell does with `import qualified Foo.Bar (x, y)<br>
as Foo`. It exposes the exports `x` and `y` as globals, and it exposes<br>
those *with everything else* under the `Foo` namespace. (Of course,<br>
this isn't the driving reason for my suggestion - I didn't think about<br>
that until now.)<br>
<span class="im HOEnZb">-----<br>
<br>
Isiah Meadows<br>
<a href="mailto:me@isiahmeadows.com">me@isiahmeadows.com</a><br>
<br>
Looking for web consulting? Or a new website?<br>
Send me an email and we can get started.<br>
<a href="http://www.isiahmeadows.com" rel="noreferrer" target="_blank">www.isiahmeadows.com</a><br>
<br>
<br>
</span><div class="HOEnZb"><div class="h5">On Fri, Dec 15, 2017 at 7:00 AM, Andrea Giammarchi<br>
<<a href="mailto:andrea.giammarchi@gmail.com">andrea.giammarchi@gmail.com</a>> wrote:<br>
> that wouldn't solve the issue we are trying to solve, because the desugared<br>
> version will have x, and y in scope, right?<br>
><br>
> we are trying to avoid issues with name clashes. If the new syntax doesn't<br>
> solve that, it's not any more helpful than `import * as foo from "mod"`<br>
><br>
> On Fri, Dec 15, 2017 at 3:17 AM, Isiah Meadows <<a href="mailto:isiahmeadows@gmail.com">isiahmeadows@gmail.com</a>><br>
> wrote:<br>
>><br>
>> I see it as it should semantically be identical to this, short a duplicate<br>
>> module request avoided:<br>
>><br>
>> ```js<br>
>> // Proposed<br>
>> import {x, y} as foo from "mod"<br>
>><br>
>> // Desugared<br>
>> import * as foo from "mod"<br>
>> import {x, y} from "mod"<br>
>> ```<br>
>><br>
>> (This includes the implication `x`/`foo.x` and `y`/`foo.y` are<br>
>> equivalent.)<br>
>><br>
>><br>
>> On Thu, Dec 14, 2017, 15:30 Andrea Giammarchi<br>
>> <<a href="mailto:andrea.giammarchi@gmail.com">andrea.giammarchi@gmail.com</a>> wrote:<br>
>>><br>
>>> I've just tried monkey patching all the scenarios I've<br>
>>> described/mentioned and it works right away.<br>
>>><br>
>>> // x.js<br>
>>> export let x = 1;<br>
>>> setTimeout(() => x = 2, 2000);<br>
>>><br>
>>> // module.js<br>
>>> import {x} from './x.js';<br>
>>> const obj = Object.defineProperty({}, 'x', {get() { return x; }});<br>
>>> export {x, obj};<br>
>>><br>
>>> // index.js<br>
>>> import {x, obj} from './module.js';<br>
>>> console.log(x, obj.x);<br>
>>> setTimeout(() => console.log(x, obj.x), 3000);<br>
>>><br>
>>> I see 1, 1 and then 2, 2 without using proxies or exotic objects.<br>
>>><br>
>>> `{a, b, c} as obj` should really just avoid `a`, `b`, `c` scope pollution<br>
>>> and create those accessors in the `obj` constant object reference.<br>
>>><br>
>>> Regards<br>
>>><br>
>>><br>
>>> On Thu, Dec 14, 2017 at 5:55 PM, Darien Valentine <<a href="mailto:valentinium@gmail.com">valentinium@gmail.com</a>><br>
>>> wrote:<br>
>>>><br>
>>>> @Andrea I think we are thinking along the same lines. I meant proxy with<br>
>>>> a lowercase p — what you described fits the bill.<br>
>>>><br>
>>>> ______________________________<wbr>_________________<br>
>>>> es-discuss mailing list<br>
>>>> <a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
>>>> <a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/<wbr>listinfo/es-discuss</a><br>
>>>><br>
>>><br>
>>> ______________________________<wbr>_________________<br>
>>> es-discuss mailing list<br>
>>> <a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
>>> <a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/<wbr>listinfo/es-discuss</a><br>
><br>
><br>
</div></div></blockquote></div><br></div>