Can we also get some feedback on specialization, please?

MacGregor, Duncan (GE Energy Management) duncan.macgregor at
Sat Jan 10 02:29:10 UTC 2015

Continuing to play around with the specialisation work, and I've hit a snag that I haven't seen reported on this list, implicit boxing and varargs.

If you had a small object in Java today which consisted of a mixture of primitive and object fields then you might reasonably write a little toString() method as

public String toString() {
    String.format("(%s, %s, %s, %s)", field1, field2, field3, field4);

and the compiler will helpfully autobox any of those fields which were declared as primitives.

If I try something similar with a specialised class then it currently gives an error because the types are any so it can't construct any Object[] from the four fields. In simple cases this could be solved by layering, but it would feel very strange to have to resort to that, and if we consider types tuples down the line then the combinatorial explosion would be ridiculous. This behaviour is entirely consistent with the type system as is, but will probably be the cause of real frustration as we go on.

Can the byte code mapping attribute be used to store some indication that boxing must be performed at a particular index?

From: valhalla-dev [valhalla-dev-bounces at] on behalf of Brian Goetz [brian.goetz at]
Sent: 05 January 2015 19:35
To: valhalla-dev at
Subject: Can we also get some feedback on specialization, please?

There's been a lot of passionate discussion here about the directions we
should or should not take Java. And this is all understandable, and
perhaps inevitable, but ... it seems to be crowding out what is actually
the primary purpose of this (-dev) list.  We had hoped, in taking the
effort to write up State of the Specialization, to get some comments on
... specialization :)

So far, nearly all the comments have been on the speculative parts of
the writeup (layers/conditional methods), as well as the usual
(supersized) portion of "I think you should do X/Y/Z instead".  Which is
all OK, but we were actually hoping to get some feedback on the part
that is written up in some detail -- and mostly implemented!  I know
it's fun to discuss the big sexy stuff, but we can't let this crowd out
the main goal.

So my question is: has anyone tried to write a program with specialized
generics with the valhalla implementation?   Well, we'd really
appreciate it.

I know people want to contribute.  At least right now, here's what
contribution looks like from our perspective:

    1.) Please try it out!  Write some code!
    2.) Tell us what works and what doesn't!
    3.) Nice comments are always a bonus!  (And are welcome even if you
didn't do (1) and (2)).
    4.) If you can't do (1) and (2), and still have something important
to say in the big-picture department, please do it a) nicely, b)
constructively, c) succinctly.


More information about the valhalla-dev mailing list