Value types - compatibility with existing “value objects”

Peter Levart peter.levart at gmail.com
Thu Jan 8 18:52:40 UTC 2015


On 01/08/2015 07:35 PM, Brian Goetz wrote:
>> Regarding “Value types” seem to assume that you will use it just for
>> small types and you will implement bigger types as objects (with
>> different syntax)."...
>
> There seem to be a lot of mis-assumptions on this topic.  There is no 
> arbitrary limit on the size of a value type (other than existing 
> classfile limitations such as constant pool size). However, many of 
> the performance benefits of value types drop off when you get beyond a 
> handful or two of components.  This is why we say the "sweet spot" is 
> things like numerics, small-ish tuples, or algebraic data types.  But 
> there's no "it stops working beyond" point that you are forced to 
> switch to, (and where there are visible performance differences will 
> be a function of hardware and time, just like cache effects are today.)
>
>> Value types are "final" which means it won't be possible to subclass.
>> However, I am disappointed with this restriction because I would like to
>> use inheritance as an easy way of composing value types. Brian, what are
>> your thoughts about this?
>
> Nothing is free.
>
> Here's one example of where the flexibility you want (and I understand 
> why you want it, restrictions usually feel restrictive) interferes 
> with the performance you want.  Suppose I could do this:
>
> value class A {
>    int x;
>    int y;
> }
>
> value class B extends A {
>    int z;
> }
>
> A[] array;
>
> OK, how do I lay this out now?  Part of the point was that I want a 
> packed layout without object headers.  But if I don't know how big a B 
> is, I can't have this.  (I don't even know whether there are other 
> subclasses of A out there that haven't even been loaded yet, and might 
> be even bigger than B.  So I can't do the simplistic thing of "take 
> the biggest subclass layout I've seen at time of array instantiation".)
>
>

What if A and B as value types were unrelated? Just their boxed 
counterparts would be related.

Peter







More information about the valhalla-dev mailing list