Typed Vector.<T> construction
Jeff Dyer
jodyer at adobe.com
Mon Jun 30 11:47:49 PDT 2008
On 6/30/08 4:26 AM, Janosch Scharlipp wrote:
> Hello,
> i am currently programming a lot in ActionScript for Flash Player 10,
> which supports for the first time Vectors.
> What annoys me is, that it is not possible to create vectors with
> initial elements AND compile time typing:
> In ActionScript you can create a Vector in two ways for example with two
> initial elements:
>
> 1)
> myVector = Vector.<MyType>([new MyType(), new MyType()]);
>
> This way is very compact, but it does not allow the compiler to check
> types, since [...] is a normal, untyped array.
>
> myVector = Vector.<MyType>([new MyType(), new Object()]);
>
> compiles fine, even if it is definitely wrong. Of course, this is kind
> of an embarrasing error to make as a programmer, but it can happen,
> for example when the inheritation chain gets changed, then you get
> runtime errors, even if it could be detected easily by the compiler.
>
>
> 2)
> myVector = new Vector.<MyType>();
> myVector.push(new MyType());
> myVector.push(new MyType());
>
> This enables compile time type checking, but it is not compact and does
> not express the "i want a vector with the following initial elements"
> intention of the programmer.
>
> Is a new syntax for this imaginable?
> Other programming languages use something like
> foo = new Bar<T>{new T(), new T()};
Proposed ES4 supports the syntax:
[new T(), new T] : Vector.<T>
to mean:
let (TMP=new Vector.<T>) (TMP[0] = new T(), TMP[1] = new T(), TMP)
This gives you the type checking you are looking for, I think.
Array initialiser annotations are not supported in AS for FP10, however, so
you'll have to continue setting elements explicitly to get static type
checking.
> Besides, why is there this "." between "Vector" and "<MyType>"?
So that expressions such as the following have clear and unambiguous
meaning:
new x < y > ( 10 )
Relational comparison of 'new x', 'y' and 10; Or, constructing and instance
of 'x<y>'. Unlike with other languages we can't distinguish between
constructable and comparable expressions (statically), or even values
(dynamically). So we resort to special syntax.
Jd
More information about the Es4-discuss
mailing list