Array and Object Literal Types

2007-08-17 Thread Garrett Smith
It would be nice to have Array literal syntax declare it's ArrayType
before the declaration of the array.

For example:

1. var x : ArrayString = [ foo, bar, document.title, getAnotherString() ];

2. var x = [ foo, bar, document.title, getAnotherString() ] : String;

example 1 is more clear to read because in a long array, you'd see
right away what type of Array it is.

Is the former syntax (or some variant thereof) going to be available?

What about for Objects?

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


Re: Array and Object Literal Types

2007-08-17 Thread Brendan Eich
On Aug 17, 2007, at 2:47 PM, Garrett Smith wrote:

 It would be nice to have Array literal syntax declare it's ArrayType
 before the declaration of the array.

 For example:

 1. var x : ArrayString = [ foo, bar, document.title,  
 getAnotherString() ];

Array is not a parameterized type. If it were, the syntax would be  
Array.T.

Array must be backward compatible, so if it were changed to be  
parameterized by element type, then it would have to default to  
Array.* when used without a parameter list. But we don't have  
default type parameters, and anyway a type-parametric Array reference  
without the actual type param list would be ambiguous: should it mean  
Array.* by default, or Array, with instantiation using an actual  
type param happening later: let A = Array; type TA = A.T ?

So there's no good way to overload Array as you want.

Also, Array is closer to Object than to any homogenous tuple or  
vector type. Hence the separate

http://wiki.ecmascript.org/doku.php?id=proposals:arrays
http://wiki.ecmascript.org/doku.php?id=proposals:vector

proposals.

 2. var x = [ foo, bar, document.title, getAnotherString() ] :  
 String;

 example 1 is more clear to read because in a long array, you'd see
 right away what type of Array it is.

Please see the above proposals and the prior proposals:

http://wiki.ecmascript.org/doku.php?id=spec:type_system
http://wiki.ecmascript.org/doku.php?id=spec:type_relations

 Is the former syntax (or some variant thereof) going to be available?

No, as explained above. But what you might want is:

let x : [string] = [foo, bar, document.title, getAnotherString()];

Notes:
* let trumps var in any hand ;-)
* string is the type of foo, String is the dynamic class for  
wrappers, as in ES1-3 that shares its .prototype with string  
instances as well as String instances, via the usual prototype-based  
delegation. Prefer string in general.
* [string] is a type expression denoted a structural array type.

 What about for Objects?

See structural object types.

/be

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