RE: ES4 draft: Map

2008-03-11 Thread Lars Hansen
Draft 3 enclosed.  Changelog near the top; the only significant
change is fixing the bug Erik noted in the prototype get
and put methods.

Please note one open issue; the current design is probably OK but
I would appreciate comments.

--lars


 -Original Message-
 From: Lars Hansen 
 Sent: 3. mars 2008 02:03
 To: Lars Hansen; es4-discuss@mozilla.org
 Subject: RE: ES4 draft: Map
 
 Draft 2 enclosed (changelog near the top).
 
 --lars 
 
  -Original Message-
  From: [EMAIL PROTECTED] 
  [mailto:[EMAIL PROTECTED] On Behalf Of Lars Hansen
  Sent: 29. februar 2008 11:34
  To: es4-discuss@mozilla.org
  Subject: ES4 draft: Map
  
  I'm enclosing the draft for the Map class.  Please comment.
  
  --lars
  
Title: The class "Map"




 The class Map 



NAME:   "The class 'Map'"
FILE:   spec/library/Map.html
CATEGORY:   Pre-defined classes (E262-3 Chapter 15)
SOURCES:REFERENCES [1], [2], [3]
SPEC AUTHOR:Lars
DRAFT STATUS:   DRAFT 3 - 2008-03-11
REVIEWED AGAINST ES3:   N/A
REVIEWED AGAINST ERRATA:N/A
REVIEWED AGAINST BASE DOC:  N/A
REVIEWED AGAINST PROPOSALS: YES
REVIEWED AGAINST CODE:  YES
REVIEWED AGAINST TICKETS:   YES
IMPLEMENTATION STATUS:  ES4 RI
TEST CASE STATUS:   Unknown


OPEN ISSUES

  * 'intrinsic::clear' uses 'iterator::get' and 'intrinsic::remove' to
perform removal.  That is by design (it allows overridden methods
that observe or modify iteration and removal to work during
clearing as well).  But is it desirable?


CHANGES SINCE DRAFT 2 (2008-03-03)

  * The prototype 'get' and 'put' methods also accept a 'notfound'
parameter.

  * Presentation:
- section headers for intrinsic methods now use the syntax
  'intrinsic::foo()' instead of just 'foo'.
- compatibility note ("new in 4th edition")
- added an explicit "extends Object" clause.
- the informative method 'allElements' was renamed as 'allItems'.
- corrected a typo
- common fields in the status block above


CHANGES SINCE DRAFT 1 (2008-02-29)

  * The value returned by 'hashcode' is constrained to be a number and
is always explicitly converted to uint

  * Map(x) returns x if x is a Map

  * 'get' and 'put' have (V|undefined) return types

  * 'get' and 'put' accept an optional value (defaulting to undefined)
which is returned if the association was not found in the map

  * There is a new method 'clear' to clear the map

  * The object returned from helper::iterate has been annotated with
an explicit type, fixing the next field.


NOTES

  * Informative methods:

Informative methods on Map do not call program-visible (i.e.,
public, protected, intrinsic, reflect, meta, iterator, or
prototype) methods on their 'this' object except as explicitly
specified in this document.

(The above clarification belongs in a general preface to the
library.)

  * Subtyping for parameterized classes: We've agreed that for a
parameterized type Cls and type T, Cls.T is a subtype of
Cls.*.  That has yet to be fully formalized.  The Map
class relies on that subtyping rule for its 'this' constraints on
prototype methods, and for type testing in the static
'meta::invoke' method.


REFERENCES

[1] http:wiki.ecmascript.org/doku.php?id=proposals:dictionary
[2] http:bugs.ecmascript.org/ticket/146
[3] http:bugs.ecmascript.org/ticket/203



 The class Map is a parameterized, dynamic, non-final, direct
subclass of Object that provides a reliable, efficient, mutable,
and iterable map from keys to values.  Keys and values may be of
arbitrary types.

COMPATIBILITY NOTE  The class Map is new in the 4th Edition of this Standard.

 A Map is realized as a hash table.  When the Map is
constructed the caller may provide specialized functions that compare
keys and compute hash values for keys.

Synopsis

 The class Map provides the following interface:


__ES4__ dynamic class Map.K,V> extends Object
{
public function Map(equals:   function = (function(a,b) a === b),
hashcode: function = intrinsic::hashcode) 

static meta function invoke(object: Object): Map.EnumerableId,*> 
static public const length = 2;

intrinsic function size() : uint 
intrinsic function get(key: K, notfound: (V|undefined)=undefined) : (V|undefined) 
intrinsic function put(key: K, value: V, notfound: (V|undefined)=undefined) : (V|undefined) 
intrinsic function has(key:K) : boolean 
intrinsic function remove(key:K) : boolean 
intrinsic function clear() : void 

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) : i

RE: ES4 draft: Map

2008-03-11 Thread Lars Hansen
 -Original Message-
 From: Erik Arvidsson [mailto:[EMAIL PROTECTED] 
 Sent: 11. mars 2008 11:25
 To: Lars Hansen
 Cc: es4-discuss@mozilla.org
 Subject: Re: ES4 draft: Map
 
 I still find this bad UI for people that do not use types, 
 and remember types are supposed to be optional.  

I agree, default type parameters would be nice.

 Currently 
 there is no way to create a map without providing types (not 
 entirely true, see below).  Neither of the following works as 
 we have speced it today:
 
 var m = new Map;
 var m2 = Map();

The latter should work, thanks for catching the bug.

 the closest thing would be to do
 
 var m3 = Map({});
 
 but that is pretty ugly.

And very likely it will become illegal, since we think that class
statics will only be available on instantiated classes (unlike now,
when they are available only on uninstantiated classes), so you'd
have to write

  var m3 = Map.string,int()

or worse.

 What I would like is that the type params are optional and if 
 left out treated as the any type.  Another simpler option is 
 to make the argument to meta::invoke to be optional and if 
 left out an empty Map.EnumerableId, * is returned.

We discussed default type parameters a few times, but it was always
thrown out.  I think the chief reason for that was that we always
tried to make it work in the context of Array (so that Array could be
both what it is in ES3 and something typed besides).  That was a
non-starter, and rightly so.

In any case, this was the sketch we were toying with:

  class Map.K=EnumerableId, V=* {
  }

One issue that I remember was the question of the meaning of
an expression that names the type without parameters.  For example,
if we want

  new Map() 

to mean 

  new Map.EnumerableId,*()

(and this is what you're asking for) then what do we mean when we say
simply 

  Map

?  Do we mean to pass the uninstantiated class object around or do we
mean to instantiate it with the default parameters?  The former is the
obvious interpretation, but then what about

  x = Map
  new x()

Does that instantiate, and so on?  No doubt all these details could be
resolved, we just thought that some things should be postponed to ES5.

--lars

 
 2008/3/11 Lars Hansen [EMAIL PROTECTED]:
  Draft 3 enclosed.  Changelog near the top; the only significant  
  change is fixing the bug Erik noted in the prototype get  and put 
  methods.
 
   Please note one open issue; the current design is probably 
 OK but  I 
  would appreciate comments.
 
   --lars
 
 
 
-Original Message-
From: Lars Hansen
 
 
   Sent: 3. mars 2008 02:03
To: Lars Hansen; es4-discuss@mozilla.org   Subject: RE: 
 ES4 draft: 
  Map Draft 2 enclosed (changelog near the top).
   
--lars
   
 -Original Message-
 From: [EMAIL PROTECTED]
  [mailto:[EMAIL PROTECTED] On Behalf Of Lars 
 Hansen
  Sent: 29. februar 2008 11:34To: es4-discuss@mozilla.org
  Subject: ES4 draft: Map   I'm enclosing the draft 
 for the Map 
  class.  Please comment.

 --lars

 
  ___
   Es4-discuss mailing list
   Es4-discuss@mozilla.org
   https://mail.mozilla.org/listinfo/es4-discuss
 
 
 
 
 
 --
 erik
 
___
Es4-discuss mailing list
Es4-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es4-discuss


Re: ES4 draft: Map

2008-03-04 Thread Jon Zeppieri
How would the 'fixed' property be used, in practice?  I can see a use
for fixed-length vectors, but I'm unsure about vectors that can be
switched between fixed and variable length by untrusted code.

-Jon

On 3/3/08, Lars Hansen [EMAIL PROTECTED] wrote:
 Draft 2 enclosed (changelog near the top).


  --lars


   -Original Message-
   From: [EMAIL PROTECTED]

  [mailto:[EMAIL PROTECTED] On Behalf Of Lars Hansen
   Sent: 29. februar 2008 11:34
   To: es4-discuss@mozilla.org
   Subject: ES4 draft: Map
  
   I'm enclosing the draft for the Map class.  Please comment.
  
   --lars
  

 ___
  Es4-discuss mailing list
  Es4-discuss@mozilla.org
  https://mail.mozilla.org/listinfo/es4-discuss



___
Es4-discuss mailing list
Es4-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es4-discuss


RE: ES4 draft: Map

2008-03-03 Thread Lars Hansen
Draft 2 enclosed (changelog near the top).

--lars 

 -Original Message-
 From: [EMAIL PROTECTED] 
 [mailto:[EMAIL PROTECTED] On Behalf Of Lars Hansen
 Sent: 29. februar 2008 11:34
 To: es4-discuss@mozilla.org
 Subject: ES4 draft: Map
 
 I'm enclosing the draft for the Map class.  Please comment.
 
 --lars
 
Title: The class "Map"




 The class Map 



FILE:   spec/library/Map.html
DRAFT STATUS:   DRAFT 2 - 2008-03-03
IMPLEMENTATION STATUS:  ES4 RI
TEST CASE STATUS:   Unknown
REVIEWED AGAINST ES3:   N/A
REVIEWED AGAINST ERRATA:N/A
REVIEWED AGAINST BASE DOC:  N/A
REVIEWED AGAINST PROPOSALS: YES
REVIEWED AGAINST CODE:  YES

CHANGES SINCE DRAFT 1

  * The value returned by 'hashcode' is constrained to be a number and
is always explicitly converted to uint

  * Map(x) returns x if x is a Map

  * 'get' and 'put' have (V|undefined) return types

  * 'get' and 'put' accept an optional value (defaulting to undefined)
which is returned if the association was not found in the map

  * There is a new method 'clear' to clear the map

  * The object returned from helper::iterate has been annotated with
an explicit type, fixing the next field.


NOTE ON INFORMATIVE METHODS

(This note belongs in a general preface to the library.)

Informative methods on Map do not call public or protected methods
on their this object except as explicitly specified in this
document.


OPEN ISSUES

  * 'intrinsic::clear' uses 'iterator::get' and 'intrinsic::remove' to
perform removal.  That is by design (it allows overridden methods
that observe or modify iteration and removal to work during
clearing as well).  But is it desirable?




 The class Map is a parameterized, dynamic, non-final, direct
subclass of Object that provides a reliable, efficient, mutable,
and iterable map from keys to values.  Keys and values may be of
arbitrary types.

 A Map is realized as a hash table.  When the Map is
constructed the caller may provide specialized functions that compare
keys and compute hash values for keys.

Synopsis

 The class Map provides the following interface:


__ES4__ dynamic class Map.K,V>
{
public function Map(equals:   function = (function(a,b) a === b),
hashcode: function = intrinsic::hashcode) 

static meta function invoke(object: Object): Map.EnumerableId,*> 
static public const length = 2;

intrinsic function size() : uint 
intrinsic function get(key: K, notfound: (V|undefined)=undefined) : (V|undefined) 
intrinsic function put(key: K, value: V, notfound: (V|undefined)=undefined) : (V|undefined) 
intrinsic function has(key:K) : boolean 
intrinsic function remove(key:K) : boolean 
intrinsic function clear() : void 

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]> 

private const equals   : function = 
private const hashcode : function = 
private var population : uint = 
}


 The Map prototype object provides these direct properties:


size:   function () 
get:function (key) 
put:function (key, value) 
has:function (key) 
remove: function (key) 
clear:  function () 



Methods on the Map class object

newMap.K,V(equals=,hashcode=)

Description  The Map constructor creates a new map for key type K
and value type V.

 The optional equals argument is a function that compares two
keys and returns true if they are equal and false if they are
not.  This function must implement a reflexive, transitive, and
symmetric relation, and equals(k1,k2) must be constant for any two
actual keys k1 and k2.  The default value for equals is a
function that compares the two keys using the === operator.

 The optional hashcode argument is a function that takes a key
and returns a numeric value for it; this key is converte to a uint
hash value for the key.  The hash value may be used to find
associations more quickly in the map.  Two calls to hashcode on
the same key value must always result in the same hash value, and a
call to hashcode must always result in the same hash value for two
key values that compare equal by the equals function.  The default
value for hashcode is the intrinsic global function hashcode.

NOTE  The constraint that equals and hashcode return
constant values does not apply to key values that are not in a Map
nor referenced from an activation of any method on Map.

NOTE  There is no requirement that the values returned from
hashcode for two unequal keys must be different.

NOTE  The operator == is not a valid comparator for the global
intrinsic function hashcode because == will consider some
values to be equal for which hashcode r

RE: ES4 draft: Map

2008-03-03 Thread Lars Hansen
 -Original Message-
 From: P T Withington [mailto:[EMAIL PROTECTED] On Behalf Of 
 P T Withington
 Sent: 3. mars 2008 13:47
 To: Lars Hansen
 Cc: Waldemar Horwat; es4-discuss@mozilla.org
 Subject: Re: ES4 draft: Map
 
 On 2008-03-03, at 02:26 EST, Lars Hansen wrote:
 
   function get(key:K, default:(V|undefined)=undefined):(V|
  undefined) ...
 
 If V? is shorthand for (V|null), what is the shorthand for 
 (V|null| undefined)?  Perhaps [EMAIL PROTECTED]  Well, at least that 
 expresses how I feel about a language with 'two nulls'.  :P

There is no shorthand for (V|null|undefined), though if V is 
a nullable type then (V|undefined) works just as well.  

--lars
___
Es4-discuss mailing list
Es4-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es4-discuss


Re: ES4 draft: Map

2008-03-03 Thread Brendan Eich
We've talked about V~ for (V|undefined). It would have a few uses in  
the RI, but not enough to close the deal.

/be

On Mar 3, 2008, at 5:48 AM, Lars Hansen wrote:

 -Original Message-
 From: P T Withington [mailto:[EMAIL PROTECTED] On Behalf Of
 P T Withington
 Sent: 3. mars 2008 13:47
 To: Lars Hansen
 Cc: Waldemar Horwat; es4-discuss@mozilla.org
 Subject: Re: ES4 draft: Map

 On 2008-03-03, at 02:26 EST, Lars Hansen wrote:

  function get(key:K, default:(V|undefined)=undefined):(V|
 undefined) ...

 If V? is shorthand for (V|null), what is the shorthand for
 (V|null| undefined)?  Perhaps [EMAIL PROTECTED]  Well, at least that
 expresses how I feel about a language with 'two nulls'.  :P

 There is no shorthand for (V|null|undefined), though if V is
 a nullable type then (V|undefined) works just as well.

 --lars
 ___
 Es4-discuss mailing list
 Es4-discuss@mozilla.org
 https://mail.mozilla.org/listinfo/es4-discuss

___
Es4-discuss mailing list
Es4-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es4-discuss


Re: ES4 draft: Map

2008-03-03 Thread Brendan Eich
You missed my invisible irony mark :-P.

/be

On Mar 3, 2008, at 9:31 AM, P T Withington wrote:

 You and Lars missed my sarcasm marks.  I hope there is _not_ a
 shorthand.

 On 2008-03-03, at 12:14 EST, Brendan Eich wrote:

 We've talked about V~ for (V|undefined). It would have a few uses in
 the RI, but not enough to close the deal.

 /be

 On Mar 3, 2008, at 5:48 AM, Lars Hansen wrote:

 -Original Message-
 From: P T Withington [mailto:[EMAIL PROTECTED] On Behalf Of
 P T Withington
 Sent: 3. mars 2008 13:47
 To: Lars Hansen
 Cc: Waldemar Horwat; es4-discuss@mozilla.org
 Subject: Re: ES4 draft: Map

 On 2008-03-03, at 02:26 EST, Lars Hansen wrote:

 function get(key:K, default:(V|undefined)=undefined):(V|
 undefined) ...

 If V? is shorthand for (V|null), what is the shorthand for
 (V|null| undefined)?  Perhaps [EMAIL PROTECTED]  Well, at least that
 expresses how I feel about a language with 'two nulls'.  :P

 There is no shorthand for (V|null|undefined), though if V is
 a nullable type then (V|undefined) works just as well.

 --lars
 ___
 Es4-discuss mailing list
 Es4-discuss@mozilla.org
 https://mail.mozilla.org/listinfo/es4-discuss


 ___
 Es4-discuss mailing list
 Es4-discuss@mozilla.org
 https://mail.mozilla.org/listinfo/es4-discuss

___
Es4-discuss mailing list
Es4-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es4-discuss


Re: ES4 draft: Map

2008-03-03 Thread P T Withington
You and Lars missed my sarcasm marks.  I hope there is _not_ a  
shorthand.

On 2008-03-03, at 12:14 EST, Brendan Eich wrote:

 We've talked about V~ for (V|undefined). It would have a few uses in  
 the RI, but not enough to close the deal.

 /be

 On Mar 3, 2008, at 5:48 AM, Lars Hansen wrote:

 -Original Message-
 From: P T Withington [mailto:[EMAIL PROTECTED] On Behalf Of
 P T Withington
 Sent: 3. mars 2008 13:47
 To: Lars Hansen
 Cc: Waldemar Horwat; es4-discuss@mozilla.org
 Subject: Re: ES4 draft: Map

 On 2008-03-03, at 02:26 EST, Lars Hansen wrote:

 function get(key:K, default:(V|undefined)=undefined):(V|
 undefined) ...

 If V? is shorthand for (V|null), what is the shorthand for
 (V|null| undefined)?  Perhaps [EMAIL PROTECTED]  Well, at least that
 expresses how I feel about a language with 'two nulls'.  :P

 There is no shorthand for (V|null|undefined), though if V is
 a nullable type then (V|undefined) works just as well.

 --lars
 ___
 Es4-discuss mailing list
 Es4-discuss@mozilla.org
 https://mail.mozilla.org/listinfo/es4-discuss


___
Es4-discuss mailing list
Es4-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es4-discuss


Re: ES4 draft: Map

2008-03-03 Thread Erik Arvidsson
Hi Lars,

prototype get and put are missing the new optional notfound param

2008/3/3 Lars Hansen [EMAIL PROTECTED]:
 Draft 2 enclosed (changelog near the top).

  --lars


   -Original Message-
   From: [EMAIL PROTECTED]


  [mailto:[EMAIL PROTECTED] On Behalf Of Lars Hansen
   Sent: 29. februar 2008 11:34
   To: es4-discuss@mozilla.org
   Subject: ES4 draft: Map
  
   I'm enclosing the draft for the Map class.  Please comment.
  
   --lars
  

 ___
  Es4-discuss mailing list
  Es4-discuss@mozilla.org
  https://mail.mozilla.org/listinfo/es4-discuss





-- 
erik
___
Es4-discuss mailing list
Es4-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es4-discuss


RE: ES4 draft: Map

2008-03-02 Thread Lars Hansen
 -Original Message-
 From: Waldemar Horwat [mailto:[EMAIL PROTECTED] 
 Sent: 1. mars 2008 01:53
 To: Lars Hansen
 Cc: es4-discuss@mozilla.org
 Subject: Re: ES4 draft: Map
 
  The optional /hashcode/ argument is a function that takes a key and 
  returns a numeric code for it. This code may be used to find 
  associations more quickly in the map. Two calls to the /hashcode/ 
  function on the same key value must return the same numeric code,
and 
  the /hashcode/ function must always return the same numeric code for

  two objects that compare equal by the /equals/ function. The default

  value for /hashcode/ is the intrinsic global function |hashcode|.
 
 Dost thou desire arbitrary numeric hashcodes or integral ones?

Good point.  intrinsic::hashcode returns uint.  Since the signature 
of the Map constructor does not yet -- and probably should not, for
compatibility with scripts -- have a very constraining signature for the
hashcode argument, the most natural thing to do seems to be to require
it to return a value that can be converted to uint, and require the
implementation to convert the return value from the hashcode function 
to uint.  Will fix.

Map( object )
  
  When the |Map| class object is called as a function, it creates a
new
  |Map| object from |EnumerableId| to |*|, populating the new |Map| 
  |Map| object with the own properties of /object/.
 
 Making Map(x) do something specialized like this seems like a 
 bad idea.  If x is already a Map, I'd expect Map(x) to be 
 idempotent and return x.

This is what most built-ins in ES3 does, and we've agreed in the past to
carry the behavior forward for several of the new classes (Map, Vector, 
and the primitive classes int, uint, double, decimal, string, and
boolean,
at least) but I agree that it would be more natural for Map(x) to return
x
if x is already a Map.  Will fix.

 Should thou need this functionality, use a static method to get it.

We've been down that road and we rejected it.

 Why does get return null instead of undefined when it fails 
 to find an instance?

No good reason that I can think of.  I think undefined is at least as
sensible; will fix.

 A version of get with a second parameter X that returns X 
 when the value isn't present would be useful.

I agree, and that parameter could be optional and default to
undefined.  Will fix.

 Need a clear() method that deletes all bindings.

I always make a new hashtable, but sure, why not.

 The iteration protocol makes a copy before starting to 
 iterate.  It might be implemented via copy-on-write but I'd 
 like to see how expensive this is.

See my answer to Erik, which I believe answers this.

--lars
___
Es4-discuss mailing list
Es4-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es4-discuss


RE: ES4 draft: Map

2008-03-02 Thread Lars Hansen
Following up to myself: 

 -Original Message-
 From: Lars Hansen 
 Sent: 3. mars 2008 08:04
 To: 'Waldemar Horwat'
 Cc: es4-discuss@mozilla.org
 Subject: RE: ES4 draft: Map
 
  -Original Message-
  From: Waldemar Horwat [mailto:[EMAIL PROTECTED]
  Sent: 1. mars 2008 01:53
 
  Why does get return null instead of undefined when it fails 
  to find an instance?
 
 No good reason that I can think of.  I think undefined is at 
 least as sensible; will fix.

Actually, it was for Java compatibility (the API is modelled on
Java, but imperfectly).  No matter.

  A version of get with a second parameter X that returns X when the 
  value isn't present would be useful.
 
 I agree, and that parameter could be optional and default to 
 undefined.  Will fix.

There is actually a problem with an arbitrary optional parameter, 
and the problem also comes up if -- as somebody sent me private
mail about -- we want put() to return the previous value for the
key, if there is one.  For strict mode we probably would like
get() to be declared to returning V or at most (V|undefined).
So X would be constrained likewise.

In summary, this seems reasonably simple:

  function get(key:K, default:(V|undefined)=undefined):(V|undefined) ...

  function put(key:K, value:V,
default:(V|undefined)=undefined):(V|undefined) ...

with the proviso that if the table may associate K with the
value undefined then the programmer has to be careful and
use has.

--lars
___
Es4-discuss mailing list
Es4-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es4-discuss


Re: ES4 draft: Map

2008-02-29 Thread ekameleon
Hello :)

Ok sorry :)

I'm going to search the old discussions about this in the mailing list :)

EKA+ :)


2008/2/29, Lars Hansen [EMAIL PROTECTED]:



  --
 *From:* [EMAIL PROTECTED] [mailto:
 [EMAIL PROTECTED] *On Behalf Of *ekameleon
 *Sent:* 29. februar 2008 11:47
 *To:* es4-discuss@mozilla.org
 *Subject:* Re: ES4 draft: Map

 Hello :)

 In AS3 the flash.util.Dictionnary class contains a little argument in the
 constructor to control the weak references :

 Exemple :
 http://www.gskinner.com/blog/archives/2006/07/as3_dictionary.html

 In ES4 the garbage collector support weak references ?


 No.

  This feature is really important for me :)


 Sorry, but we've discussed this extensively in the past and have decided
 not to require support for weak references in ES4.

 --lars


 To implement a full Event model like AS3 event model based Dom2/3 W3C
 event model... this feature is important for example :)

 EKA+ :)



 2008/2/29, Lars Hansen [EMAIL PROTECTED]:
 
  I'm enclosing the draft for the Map class.  Please comment.
 
 
  --lars
 
  ___
  Es4-discuss mailing list
  Es4-discuss@mozilla.org
  https://mail.mozilla.org/listinfo/es4-discuss
 
 
 

___
Es4-discuss mailing list
Es4-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es4-discuss


Re: ES4 draft: Map

2008-02-29 Thread Waldemar Horwat
 The optional /hashcode/ argument is a function that takes a key and 
 returns a numeric code for it. This code may be used to find 
 associations more quickly in the map. Two calls to the /hashcode/ 
 function on the same key value must return the same numeric code, and 
 the /hashcode/ function must always return the same numeric code for two 
 objects that compare equal by the /equals/ function. The default value 
 for /hashcode/ is the intrinsic global function |hashcode|.

Dost thou desire arbitrary numeric hashcodes or integral ones?


   Map( object )
 
 When the |Map| class object is called as a function, it creates a new 
 |Map| object from |EnumerableId| to |*|, populating the new |Map| object 
 with the own properties of /object/.

Making Map(x) do something specialized like this seems like a bad idea.  If x 
is already a Map, I'd expect Map(x) to be idempotent and return x.

Should thou need this functionality, use a static method to get it.

Why does get return null instead of undefined when it fails to find an instance?

A version of get with a second parameter X that returns X when the value isn't 
present would be useful.

Need a clear() method that deletes all bindings.

The iteration protocol makes a copy before starting to iterate.  It might be 
implemented via copy-on-write but I'd like to see how expensive this is.

Waldemar
___
Es4-discuss mailing list
Es4-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es4-discuss