Arrays now implement "Arrayish"

Peter Levart peter.levart at gmail.com
Thu Apr 28 13:57:35 UTC 2016



On 04/28/2016 03:14 PM, Rémi Forax wrote:
> Answering to myself,
> yes, the prototype support default methods this is currently how arraySize, arrayGet and arraySet are implemented.
>
> This means by the way that a class can implements Arrayish without providing any implementations so a ClassCastException will be raised.
>
> Perhaps you should have two interfaces,
> Arrayish with only abstract methods and ArrayIshImpl (for a lack of better name) which extends Arrayish contains the default methods and is the one which is injected as interface for each array class.
... and is hidden from public view (package-private?)

Peter
>
> Rémi
>
>
> Le 28 avril 2016 15:02:52 CEST, "Rémi Forax" <forax at univ-mlv.fr> a écrit :
>> Hi David,
>> did you check that Arrayish can contain default methods ?
>>
>> regards,
>> Rémi
>>
>>
>> Le 27 avril 2016 14:52:41 CEST, David Simms <david.simms at oracle.com> a
>> écrit :
>>> Greetings,
>>>
>>> I've just pushed a set of changes to enable all arrays to implement
>> the
>>> "java.lang.Arrayish" interface:
>>>
>>>     public interface Arrayish<any T> extends Cloneable,
>>>     java.io.Serializable {
>>>          int arraySize();
>>>          T arrayGet(int index);
>>>          void arraySet(int index, T element);
>>>     }
>>>
>>> Thanks to John Rose for the original patch, which I have adapted
>>> somewhat.
>>>
>>> How does it work ?
>>>
>>>   * "Klass->extra_super()" contains an optional "InstanceKlass*"
>>>     pointer, which all array klasses have set to their appropriate
>>>     Arrayish, i.e.:
>>>       o int[] extra_super() = "Arrayish<int>"
>>>       o Object[] extra_super() = "Arrayish"
>>> * Classes used as "extra_super" must currently be interfaces, and
>> have
>>>     their own "self itable" generated at load time.
>>>   * The extra_super mechanism allows the "Arrayish" interface to be
>>>     injected during JVM start-up, but after the basic array types need
>>>     to be initialized
>>>   * "extra_super()" is used when, checkcast/instanceof and looking up
>>>     interface methods
>>>   * See jtreg test: "hotspot/runtime/valhalla/arrays/ArrayTypes.java"
>>>
>>>
>>> This is a prototype, there are caveats (and dragons):
>>>
>>>   * The current "Model 3" implementation uses a specializer written in
>>>     Java, for bootstrapping the Arrayish specializations, these are
>>>     currently built at JDK compile time (placed
>>>     "$JAVA_HOME/valhalla-prespecialized")
>>>       o There is no support yet for double slot types (double and
>> long,
>>>         and hence their arrays)
>>>       o These classes are specific to the JVM runtime, and must not be
>>>         seen by "javac" ( "VALHALLA_PRESPECIALIZED_DIR" is known to
>> the
>>>         classloader implementation, but not the classpath).
>>>   * x86 32 & 64 bit architectures only at this point
>>>    o arrays on other architectures will simply not implement
>> "Arrayish"
>>>   * Nothing about this implementation is set in stone, prototype code
>>>     and quality (piggy-backing on these changes, then ymmv)
>>>   * The type hierarchy for arrays will no doubt continue to be in flux
>>>
>>>
>>> Cheers
>>> /David Simms



More information about the valhalla-dev mailing list