David, Thank you!

Suppose I will put class Edge into the Array.
How to define Edge hasZero constraint and provide a zeroValue for this
type?

class Edge {
    var first: int;
    var second: int;
    public def this (f: int, s: int) {
                first = f;
                second = s;
        }
}

Best Regards,
-----------------------------------------------------------------
Hai Chuan(Haichuan) Wang,     王海川
Research Staff Member, System Software, IBM Research - China
TEL:   86-21-60924401    FAX:   86-21-60923522

David P Grove <gro...@us.ibm.com> wrote on 2011-04-05 20:22:19:

> From: David P Grove <gro...@us.ibm.com>
> To: Mailing list for users of the X10 programming language <x10-
> us...@lists.sourceforge.net>
> Date: 2011-04-05 20:27
> Subject: Re: [X10-users] Create an generics Array[ET] with null as
> initial value.
>
>
> Hai Chuan Wang <wangh...@cn.ibm.com> wrote on 04/05/2011 05:11:39 AM:
> >
> > I'm writing a data structure with generics, and needs an internal array
> to
> > store data.
> > But the array should be initialized with null value at the beginning.
> >
> > public class Seq[ET] {
> >     public var S:Array[ET](1){rail};
> >     public var sz:int;
> >
> >     public def this(s:int) {
> >       sz = s;
> >             S = new Array[ET](sz, null); //<==== problem here
> >     }
> > }
> >
> > Because ET has no "hasZero" attribute. I don't know how to create the
> array
> > with null as initial value.
> >
> > new Array[ET](sz, null), will treat "null" as "(int)=>ET", and throw
NPE.
> > null cannot be casted to ET type, either.
> >
> > Anyone can give some suggestions?
>
> Array is intended to be type safe, and in X10 an unconstrained T could be
> instantiated on some type S such that sizeof(S) bytes of zero's is not a
> valid value of type S.  So, Array has been written to prevent you from
> doing this.
>
> What you can do is:
>    (a) add the {ET haszero} constraint to Seq which will prevent such
> instantiations and thus allow you to call the Array constructor that
> zero-initializes the backing storage.
>    (b) force the user to provide an "initial value" in the constructor
> and use that to initialize the array.
>    (c) instead of using Array, use ArrayList or IndexedMemoryChunk for
> your backing storage. Both of these sidestep this piece of the X10 type
> system.  ArrayList does it by using an IMC under the covers, while not
> allowing clients to see any uninitialized values.  So ArrayList is type
> safe, but has some constraints on how it can be used (in particular, you
> always have to densely use the indices elements from 0...size-1; you
can't
> have gaps).  IndexedMemoryChunk is not typesafe.
>    (d) You can make your backing array be an Array[Cell[T]].  This
> injects an extra-level of indirection, and will not perform as well as
the
> other solutions.
>
> Personally, I think (a) is the most viable solution.  I think it is a
> fairly natural outcome of the design point taken by the X10 type system
> that many generic collection types should have the {T haszero} constraint
> on them to allow efficient implementation.  Arguably, this change should
be
> made in the x10.util collection classes as well. This then forces clients
> that need to put types that don't satisfy the haszero constraint into
> Cells/Boxes themselves before inserting them into the collection.  This
is
> cumbersome, but I would suggest is putting the programming burden where
it
> most likely belongs.
>
> --dave
>
------------------------------------------------------------------------------

> Xperia(TM) PLAY
> It's a major breakthrough. An authentic gaming
> smartphone on the nation's most reliable network.
> And it wants your games.
> http://p.sf.net/sfu/verizon-sfdev
> _______________________________________________
> X10-users mailing list
> X10-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/x10-users
------------------------------------------------------------------------------
Xperia(TM) PLAY
It's a major breakthrough. An authentic gaming
smartphone on the nation's most reliable network.
And it wants your games.
http://p.sf.net/sfu/verizon-sfdev
_______________________________________________
X10-users mailing list
X10-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/x10-users

Reply via email to