Changes to signatures?

Brian Goetz brian.goetz at
Mon Oct 27 15:24:22 UTC 2014

>> Things that are currently expressible will retain their current
>> expression.  There may be new forms of expression added, such as
>>    class Foo<any T> { ... }
>>    class Foo<ref T> { ... } // existing declarations of Foo<T>
>>                             // become shorthand for this
> No, I didn't mean Generics at the language level, but the Generic
> Signatures emitted in class files. Sorry, if that was not clear.

So, at the very least, we have to have a way to encode any-ness (or 
various other new capabilities or restrictions) of type variables in the 
classfile.  Its possible this will be stuffed into the signature 
attribute, and also possible we'll add another attribute instead.  This 
is effectively a "syntax" decision that can be late-bound (if in your 
capacity as compiler-maintainer, you have an opinion, feel free to share.)

It's a good time to revisit the generics-related attributes in the class 
file; one thing that has been a persistent source of pain, that we might 
fix now, is to have an attribute that encodes metadata about *all* the 
type variables from enclosing lexical scopes, rather than having to go 
to N different class files to gather that.  (The status quo is OK for 
compilers, which have probably pulled in the classes anyway, but less OK 
for a runtime specializer.)  The specializer needs this since to 
transform TT; to something, it has to know what T is being specialized 
to, and that means it has to know all the tvars in scope, not just the 
ones declared in the current class/method.

More information about the valhalla-dev mailing list