Nathan Wall (2012-12-09T14:07:16.000Z)
I see my previous email did not format well in the archive. I'm retrying this. (Could someone please give me some formatting tips?)
Nathan

> The problem is that imports are not normal variable assignments. They
> do not copy values, like normal destructuring, they are aliasing
> bindings! If you were to allow arbitrary expressions and patterns,
> then this would imply aliasing of arbitrary object properties. Not
> only is this a completely new feature, it also is rather questionable
> -- the aliased location might disappear, because objects are mutable.


Could it be structured so that using `export` directly on a variable exported the alias, while using `import { x: [ a, b ] } from A; ` was basically just sugar for `import { x } from A; let [ a, b ] = x;` so that a and b copied not aliased?

Example:

    module A {        export let x = { a: 1, b: 2 };        export function f() { x = { a: 3, b: 4 }; };    }

    ...

    import { x: { a, b }, f } from A;    f();    print(a); // 1    print(b); // 2

    ...

    import { x, f } from A;    f();    print(x.a); // 3    print(x.b); // 4
 		 	   		   		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20121209/abf7c98f/attachment-0001.html>
github at esdiscuss.org (2013-07-12T02:26:06.486Z)
I see my previous email did not format well in the archive. I'm retrying this. (Could someone please give me some formatting tips?)
Nathan

> The problem is that imports are not normal variable assignments. They
> do not copy values, like normal destructuring, they are aliasing
> bindings! If you were to allow arbitrary expressions and patterns,
> then this would imply aliasing of arbitrary object properties. Not
> only is this a completely new feature, it also is rather questionable
> -- the aliased location might disappear, because objects are mutable.


Could it be structured so that using `export` directly on a variable exported the alias, while using `import { x: [ a, b ] } from A; ` was basically just sugar for `import { x } from A; let [ a, b ] = x;` so that a and b copied not aliased?

Example:

    module A {
      export let x = { a: 1, b: 2 };
      export function f() { x = { a: 3, b: 4 }; };
    }

    ...

    import { x: { a, b }, f } from A;
    f();
    print(a); // 1
    print(b); // 2

    ...

    import { x, f } from A;
    f();
    print(x.a); // 3
    print(x.b); // 4