Separating a Hash type from Object

Lars T Hansen lth at acm.org
Mon May 7 04:47:31 PDT 2007


On 5/7/07, zwetan <zwetan at gmail.com> wrote:
> On 5/7/07, Peter Hall <peter.hall at memorphic.com> wrote:
> > Zwetan,
> > This is what we are talking about. But the es4 spec cannot make
> > assumptions about an implementation's GC, which may (or may not) be
> > necessary - at least for weak keys - but it's getting late in the game
> > to have to find that out. That's a summary, but search the list
> > archives...
> >
> > In general ES4 cannot take things, just because they have been
> > implemented in Tamarin. ES4 is supposed to be
> > implementation-independant. There are many factors that could make a
> > feature harder or easier (or just more or less desirable) to implement
> > in a given implementation - choice of GC seems to be a big factor in
> > this instance, but there are plenty of others.
> >
>
> ok fair enougth, I was under the assumption that Tamarin will become
> a de facto block for any ES4 implementation.
>
> But what I was sugesting is merely add a predefined Dictionary class
> as what have been done with the ByteArray class
> http://developer.mozilla.org/es4/proposals/bytearray.html

That is what is being discussed.  There is at present no credible
proposal for new syntax or a new primitive "Hash" type.

Peter Hall succinctly make the two important points: there are design
issues to be resolved (notably whether weak refs are required to make
a Dictionary useful), and probably more importantly, we're way past
any reasonable feature deadline.  (ByteArray was arguably accepted
after the feature deadline; but ByteArray was special, and violating
the deadline again does not make a bad situation good ;-)

Following is the proposed API for the dictionary class, note this
proposal has been *rejected* for ES4.  It would be rejected even
without the provision for weak refs.  I'm including it only to make
the point that, like a lot of other data structures, it can be
implemented in portable ES4 and does not need to be part of the
language.  (That happens not to be the case for ByteArray, whose
entire reason for existence is storage efficiency coupled with
performance.)

class Dictionary.<K,V> {
    function Dictionary(weak: boolean = false)
    public function from(x : Object!)
    public function size() : uint
    public function get(key: K) : V?
    public function put(key:K, value:V) : void
    public function has(key:K) : boolean
    public function remove(key:K) : boolean
    iterator function get(deep: boolean = false) : iterator::IteratorType.<K>
    iterator function getKeys(deep: boolean = false) :
iterator::IteratorType.<K>
    iterator function getValues(deep: boolean = false) :
iterator::IteratorType.<V>
    iterator function getItems(deep: boolean = false) :
iterator::IteratorType.<[K,V]>
}

--lars



More information about the Es4-discuss mailing list