I agree this is pretty important. Using actual maps really frees up a lot
of complexity, but the syntax is cumbersome to say the least.

Whatever the decided syntax, bare words as string keys is a really bad idea
IMO. The key syntax should be parsed as an expression, like the values are,
and like they are in basically every other language.

Another outstanding issue is that we might want the syntax for
`Immutable.Map`, or `WeakMap`, or `MapTwoPointOh` that improves deficiency
$x, $y and $z. I'd say introducing a special syntax for `Map` right now is
not ideal.

Rather, we have an opportunity to instead devise a syntax for an abstract
map. While we're at it, we might as well do the same for an abstract list.
Why should maps have all the fun?

```
const {List: IList, Map: IMap} = Immutable;
const bar = 43;
const map = IMap#{"foo": 42, bar: 44};  // keys "foo" and 43
const list = IList#[4, 5, 6, 7, Map#{map: "why not?"}];  // 5th element is
a Map with one key, which is the Immutable.Map above
const weakMap = WeakMap#{map: "It's an Immutable", list: "Also Immutable"};
 // WeakMap keys are the objects map and list
```

It could desugar as, for the sake of example:

```
Foo#{key: value, ...}
➔
Foo[Symbol.literalOf]([[key, value], ...][Symbol.iterator]())
```

and

```
Foo#[value, ...]
➔
Foo[Symbol.literalOf]([value, ...][Symbol.iterator]())
```

The nice thing about this is it's extensible and future proofs the language
a little bit. The actual arrays need not exist if engines choose to
implement this more efficiently - the syntax just results in an iterator
which yields the elements of the literal. The only difference between the
`[]` and the `{}` notation ise that the `{}` notation enforces
syntactically valid key-value pairs and are a little less heavy on brackets.

I know literally every proposal ever these days seems to claim the `#`
symbol now, so that's clearly an issue to contend with... :)

Alex


On 27 October 2015 at 22:55, Mohsen Azimi <m...@azimi.me> wrote:

> I'm using Maps a lot now and I was thinking why there is no "easy" way of
> declaring them like objects and arrays.
>
> I'm sure I'm not the first one who came up with the idea of having Map
> literal declaration. There are many ways we can introduce new syntax for
> declaring Maps via a literal syntax such as:
>
> ```
> let map = [window: 'window', document: 'document'];
> ```
> or
> ```
> let map = {{window: 'window', document: 'document'}}
> ```
> and possibly many more.
>
> I searched the discussions  but couldn't find a topic on this. Have you
> discussed this before?
>
> _______________________________________________
> es-discuss mailing list
> es-discuss@mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to