Separating a Hash type from Object
Brendan Eich
brendan at mozilla.org
Wed May 23 06:54:24 PDT 2007
On May 5, 2007, at 11:40 PM, Neil Mix wrote:
> Has this thread dropped again? That's too bad. It seems like we
> keep going in this circle:
>
> 1) we need a base Dictionary class
> 2) in order to be successful, it needs "good UI" and perhaps weak refs
> 3) there's no syntax proposed for this
> 4) it's awfully late for any big changes anyway
> 5) but we need a Dictionary class
Good analysis, and thanks for keeping this pot boiling.
> I take issue with #2. It's my impression that the veteran JS
> developers on this list have all stated a strong desire for key-safe
> storage, and I believe that they would all agree that a Dictionary
> without syntactic sugar and weak refs is better than nothing at all.
> Do any JS hackers here disagree?
I do. I think users will gravitate to Object because of the
initialiser syntax. I may be wrong, but it's definitely a trap that
JS hackers fall into.
So I've been arguing for a week or so, mostly with myself, that we
have just about enough in the current ES4 proposals to "do almost
everything", and with a neat syntactic sugar proposal from Lars, I
think we're done. Here's the scoop:
1. Start by satisfying the thirst for object initialiser syntax: let
dict = {a:1, b:2, ...}.
2. To avoid collisions with prototype properties, use a private/
unique namespace:
private namespace u;
let dict = {u::a: 1, u::b: 2, ...};
3. Since the repeated u:: defeats the purpose of (1), allow a default
namespace to be specified for all unqualified property names in the
initialiser:
private namespace u;
let dict = u::{a:1, b:2, ...};
4. Key-safe membership testing: dict.u::[key] or 'use namespace u;
dict[key]'.
Comments?
/be
More information about the Es4-discuss
mailing list