Hi Victor<div><br></div><div>Not sure I understand - the desugaring I wrote would absolutely preserve the written ordering because it speaks in terms of an ArrayIterator of key-value pairs. If the map type to which it's applied chooses to forget the ordering then that's fine.</div><div><br></div><div>Alex<span></span><br><br>On Wednesday, 28 October 2015, Viktor Kronvall <<a href="mailto:viktor.kronvall@gmail.com">viktor.kronvall@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">> ```<br><span style="font-size:13px">> const map = IMap#{"foo": 42, bar: 44}; <br>> ```</span><div><div style="font-size:13px">> It could desugar as, for the sake of example:</div><div style="font-size:13px">> </div><div style="font-size:13px">> ```</div><div style="font-size:13px">> Foo#{key: value, ...}</div><div style="font-size:14px">> ➔<br></div><div style="font-size:13px">> Foo[Symbol.literalOf]([[key, value], ...][Symbol.iterator]())</div><div>> ```<br><br>I like this proposal. However, Maps should guarantee insertion order when traversing the keys and values and desugaring it like that does not respect this guarantee or more precisely it will lead to (in my opinion) unexpected order of the keys.<br><br>```<br>Object.keys({1: 6, bar: 'Hello', 2: 8}); // → [ '1', '2', 'bar' ]<br>```<br><br>If I'm not mistaken this will be same order for `{1: 6, bar: 'Hello', 2: 8}[Symbol.iterator]()`.<br><br>This implies that:<br><br>```<br>Map#{1: 6, bar: 'Hello', 2: 8};<br>```<br><br>Will not have entries in the order `[[1, 6], ['bar', 'Hello'], [2,8]]` but instead `[[1,6], [2,8], ['bar','Hello']]`.<br><br></div><div>This means that possible future destructuring of a Map will be harder to reason about.<br><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">2015-10-28 2:21 GMT+01:00 Alexander Jones <span dir="ltr"><<a href="javascript:_e(%7B%7D,'cvml','alex@weej.com');" target="_blank">alex@weej.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">True, but easy to mess up and only be treated to a runtime error. Three nested brackets at the start and end could definitely be better, and this just encourages people to use POJSOs instead. Also not a very uniform interface if you look at how to construct a Map, Set or Immutable.List at present, though admittedly constructor call for the ES6 types would be a partial improvement.<div><div><div><br>On Wednesday, 28 October 2015, Tab Atkins Jr. <<a href="javascript:_e(%7B%7D,'cvml','jackalmage@gmail.com');" target="_blank">jackalmage@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Wed, Oct 28, 2015 at 8:36 AM, Alexander Jones <<a>alex@weej.com</a>> wrote:<br>
> I agree this is pretty important. Using actual maps really frees up a lot of<br>
> complexity, but the syntax is cumbersome to say the least.<br>
><br>
> Whatever the decided syntax, bare words as string keys is a really bad idea<br>
> IMO. The key syntax should be parsed as an expression, like the values are,<br>
> and like they are in basically every other language.<br>
><br>
> Another outstanding issue is that we might want the syntax for<br>
> `Immutable.Map`, or `WeakMap`, or `MapTwoPointOh` that improves deficiency<br>
> $x, $y and $z. I'd say introducing a special syntax for `Map` right now is<br>
> not ideal.<br>
<br>
Currently, the "extensible literal syntax" for this isn't that bad:<br>
<br>
const bar = 43;<br>
const map = Immutable.Map([["foo", 42], [bar, 44]]);<br>
<br>
It's a little more verbose because the entries have to be surrounded<br>
by [], but hey.<br>
<br>
~TJ<br>
</blockquote></div>
</div></div><br>_______________________________________________<br>
es-discuss mailing list<br>
<a href="javascript:_e(%7B%7D,'cvml','es-discuss@mozilla.org');" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>
</blockquote></div>