Status update: generic specializer

Brian Goetz brian.goetz at oracle.com
Mon Aug 25 20:36:47 UTC 2014


We've gotten the generic specializer to a point where it can do quite a 
lot; I've pushed code to the jdk/ repo so that specialization now can 
happen on the fly through classloading hacks.

Maurizio has already posted details on the compiler part of the 
implementation.  To opt into specialization, decorate a specializable 
type variable with the "any" modifier:

class Box<any T> {
     T element;

     Box(T t) { this.t = t; }

     T get() { return t; }

     void set(T t) { this.t = t; }
}

When used as a raw type, or with reference types as the instantiation of 
T, things will behave exactly as before.  When used with primitive 
instantiations of T, a new class will be specialized on the fly when 
needed, rewriting T to its specialized value in interface and 
implementation.

There are *many* limitations.  But, it is at the point where a lot of 
things work already, and people may well want to play with it, and you 
should be able to just use javac and java from the valhalla build and do 
some reasonable simple things with specialized classes.

Next up: specializing ArrayList<int>.

Have fun!



More information about the valhalla-dev mailing list