Happy New Year! Attendees: Remi, Dan H, Tobi, Dan S, John, Karen
AIs: All - review nestmates JVMS invokeinterface selection changes All - review Dan’s proposal for constant pool structural descriptors Remi - proposal for T-Types - simpler approach to generic specialization I. Nestmates 1. JVMTI -agreed to modify JVMTI specification to disallow modifying NestHost or NestMembers attributes as part of class redefinition. 2. InvokeInterface selected method discussion - Karen sent an email http://mail.openjdk.java.net/pipermail/valhalla-spec-experts/2017-December/000486.html <http://mail.openjdk.java.net/pipermail/valhalla-spec-experts/2017-December/000486.html> with an attached .pdf that essentially described the invokeinterface selection changes from pre-nestmates. (oops - .pdf was stripped) Need to revisit from further investigation - I will send a separate email. II. Constant Pool future changes Dan followed-up with an email: http://mail.openjdk.java.net/pipermail/valhalla-spec-experts/2017-December/000490.html <http://mail.openjdk.java.net/pipermail/valhalla-spec-experts/2017-December/000490.html> Dan S discussed a proposal to evolve Descriptors in the Constant Pool from strings to structured, in part motivated by template specialization. Today we use name mangling for arrays and for the Minimal Value Types prototype. Proposal is to have a Descriptor refer to a set of other Constant Pool entries which describe types, e.g. CONSTANT_ArrayType_info - would point to the type of its element e.g. CONSTANT_PrimitiveType_info - would have a byte which says which primitive e.g. CONSTANT_ParametersAndReturn_info - CP indices for return and parameters Goals: Dan H: request fixed length constant pool entries -> leading to proposal to contain the parameters and return value in an attribute rather than in the CONSTANT_ParametersAndReturn_info directly. Karen: ability for implementation to continue to use a String - so as to allow fast method lookup searches and reduce API changes, without having to do lots of constant pool resolution/class loading Karen: need ability to incorporate live types with different class loaders - this is a new challenge Remi: Already have L/D/I/F Would the new version be e.g. int.class? Today you can’t store an int in an object, but we can store a value type with an int - is it possible we don’t need the new primitives - or at least too soon to know? Is it possible JIT can do most of the specialization and we won’t need this? Dan S: other motivations John: wants this for template classes Remi: What if instead of template classes we had a T-Type descriptor - which is less powerful than template holes - substitution fills the CP holes AI: Remi - write a proposal - we would like to see how that might work Dan S: Cycle handling Array types can have cycles - rather than relying on ordering - perhaps tell tree depth - e.g. component type & dimensions - all in the CP John: perhaps modify to include the depth indicators in an attribute (separate proof of acyclicity) Remi: but if you insert a condy … John: would need to discard the attribute Dan H: concern about a constant array for each dimension ? maybe some adhoc compression techniques Remi: why do you want to be cycle free? Dan S: hard to verify if types cyclical? Remi: why do you need to check in the verifier? John: maybe a structural constraint? Remi: if value - ok, but not for an array of values? e.g. Object[] with first entity as itself Dan: want array type convertible to finite string, benefit of attribute not tied to construct is it can evolve Dan H: Concerns about attributes - will this be as hard to maintain for e.g. class redefiners/bytecode generators as stackmaptables? No - you have to keep the CP indices in sync, but stackmaptables required abstract interpretation - transformer did not have the type information, and the compression mechanism was harder to implement and these would just require bumping indices. III LWorld Value Types - Remi Issue 1: Can Object[] store an array of VT? Dan S: NOT allow as part of subtyping Karen: missed that - Brian asked if X <: Object is X[] <: Object[] e.g. if X is a Value Type Why would this not be true? Dan S: performance concerns? (ed. note - I need to understand this better) Issue 2: putfield semantics aaload/aastore can do the same thing for value types and references if field is a ValueType can’t put a reference type in it Karen: for an array of VT - must have a VT to store in it for an object container that has a value type field - you can write a different value type in the field the restriction is on updating a field in an immutable value type itself Remi: when can the VM store a VT as an Object (ed. note: I presume he meant indirectly vs. flattened) Note: VM chooses when to do flattening - need to clarify in spec The author does NOT know if a value type has been flattened in a given container - reference, value type, array thanks, Karen