Dan - I can’t find it either. We’ll have to ask John.
thanks, Karen > On Jun 21, 2017, at 9:55 AM, Daniel Heidinga <daniel_heidi...@ca.ibm.com> > wrote: > > > AI: John - send out javadoc to EG > > derived class := Class.derivedClassFactory(Class mainClass, T userData, > > String name) > > In the spirit of the usual "5 min before the meeting" ritual action item > panic, I'm trying to review the javadoc for this and can't seem to find it. > Can it be sent again? > > Thanks, > --Dan > > ----- Original message ----- > From: Karen Kinnear <karen.kinn...@oracle.com> > Sent by: "valhalla-spec-experts" > <valhalla-spec-experts-boun...@openjdk.java.net> > To: valhalla-spec-experts@openjdk.java.net > Cc: > Subject: minutes Valhalla EG June 07, 2017 > Date: Wed, Jun 7, 2017 4:28 PM > > Valhalla EG Minutes June 07, 2017 > > attendees: Bjorn, Dan H, Dan S, John, Vlad, Frederic, Lois, Brian, Maurizio, > Karen > > AI ALL: > Dan Smith sent an initial draft of a JVMS with experimental support for MVT > for review. > Feedback in email requested - sooner rather than later please. > AI ALL: > Review embedded proposal for issue 1 - John javadoc to avoid exposing > internal derived value type name > Review embedded proposal for EA for handling CONSTANT_Class > > Timing note: > Value type exploration is following three timeframes: > Minimal Value Types Early Access (EA) - goal: ASAP so we can get > feedback from initial users > Minimal Value Types (MVT) - goal: w/JDK10 for much broader feedback > Valhalla Value Types - "real" vs. shady values - much richer feature set > Some of the issues we are exploring - such as type vs. class will need to > evolve, so we need > to reach decisions on our initial EA stake in the ground ASAP. > For that - review of and conclusions to JVMS and other open issues is > needed. > > Issue 1: Exposure of mirror and mirror name for the value class > Bjorn: (please correct any inaccuracies) > IBM implementation does NOT expose the value type mirror name > ValueType.valueClass is the only way to get the value type mirror > getClassName returns the same answer > 2 java objects, same underlying data > no internal derived value type name is exposed > > John: proposal for breaking the link to the secondary mirror > Model is that there is one primary mirror and multiple secondary mirrors > Brian: one nominal class and multiple derived classes analogous to a > DirectMethodHandle and derived > MethodHandles > Later reflection couild add APIs at the java level to get the secondary > mirrors > - has an initial proposal in which you pass in > head class, user data (e.g. value type descriptor), user-chosen name > name is not resolvable, doesn't work for findClass, but visible when > reflecting > > Dan H: do we need to ensure user name/user data consistent? That has been an > issue in related APIs? > John: no > Karen: assume we can not use this name to look up a class (forName)? just for > reflection to print? > John: not for lookup > > Maurizio: this could be useful today (i.e. for EA) for a value class > Issue: Reflection behavior for EA > Karen: we already agreed reflection will not work - will throw an exception > Maurizio: it could be actually easier to use John's factory than to throw > an exception > > Timing: > AI: John - send out javadoc to EG > derived class := Class.derivedClassFactory(Class mainClass, T userData, > String name) > All: evaluate proposal both for doability > also evaluate for timing: EA vs. MVT? > > > Issue 2: Constant Pool representation for derived value type (JVMS term: > value class) > > Goals: > 1. cache point for usage - need separate storage for DVT and VCC > 2. prefer not to do string parsing over and over to get the mode > 3. verifier ensure type safety without additional eager class loading > 4. ensure single resolution of underlying value-capable-class > (longer-term want single resolution of underlying source classfile) > 5. allow implementations to support older classfiles > 6. tool support - make sure this works for a mix of constant pool changes > e.g. tools that do not know about new versions still instrument new > classfiles > - need to make sure these still work as much as possible > - so for these folks we need to not change the meaning of CONSTANT_Class > 7. future - make sure the model works for future derivation from more than > one type > - e.g. Foo<Bar> > 7a. request that for a Parameterized Type: this_class (name and > CONSTANT_Class today) > allows lazy resolution of the list > (ed. note: need to discuss details of "lazy" here - loading the class > file perhaps, > but instantiating a type from it will need the parameterizations, so far > we have > conceptually recorded the loaded class file under the "head" type, with > default/erased > parameterizations) > 8. upside opportunity: Constable and pattern matching - helpful if all > class objects > were represented the same way when generating bytecode > e.g. int.class vs. Integer.class require different handling today > 9. migration: a class should be able to migrate to being a value type > approach: will require boxing to access, but if you pass for example a > boxed value type > the current client should continue to work > 10. migration: value type to reference? Open question > > 11. ed. note: we did not mention that for MVT we actually have multiple > source classfiles and > at least one potential prototype for parameterized types also generates > separate classfiles. > While we strongly do not want to build in the concept of multiple separate > classfiles, it > would be valuable if the constant pool representation was able to support > that. > This might help extend to nested classes as well. > > John: > > two views of CONSTANT_Class: > 1. is it a type? then need nested CONSTANT_ClassFile: Class[ClassFile] > 2. is it a loaded class file? then need surrounding decoration > Type[Class] > bad third choice: 3. use separately resolved peers Class["name.1"], > Class["name.2"] where name is mangled but > refers to same loaded class file > > Today: CONSTANT_Class represents both the type and the loaded class file. > > Dan S: > Prefers option 1: type with a reference to a raw classfile > (ed. note - Dan S - I didn't get any details on why you prefer this for > longer-term, it would help > to understand) > (ed. note - Dan S - can you add some notes on how to represent goal #11?) > > Bjorn: > Are there any cases in which a classfile does not represent a reference > type? > Valhalla - goal is that the classfile represents both value type and the > boxed value type > > Proposal from John/Karen: > CONSTANT_Class_info: used for both the "head" LType and the classfile - > conflate for backward compatibility > CONSTANT_Value_info: mode information and references the underlying > CONSTANT_Class_info > Parameterized type: has auxiliary info and references at least on > underlying (head) CONSTANT_Class_info > e.g. List<Foo> would reference List class, and Foo would linked to in > auxiliary info > > AI: All > Explore this potential model: > Would this make sense from a JVMS perspective? > Would this work for JVM implementations? > Would this work for bytecode generation etc? > - please check if this is feasible short-term, i.e. for EA > - also explore if we could "flop" to #1 later > > Feedback: > John: short term: Try the proposal above with CONSTANT_Value_info refering to > an underlying CONSTANT_Class_info > Spec direction is likely to be CONSTANT_Class references a Classfile > Lois: ok with verifier > Frederic: ok with bytecodes > Bjorn: prefer #3 ;Q - for MVT - it has minimal impact > ok with #2, but the change wouldn't slow us down much > Frederic: todwy - handle by using separate opcodes and all have CONSTANT_Class > (ed. note - and we haven't implemented the verifier which would like to > sanity check > that the CONSTANT_Class matches the expected type in the opcode) > > > --- > 3. Ways to phase out current classfile capabilities such as CONSTANT_Class? > Or LDC CONSTANT_Class? > Brian: jigsaw added the (not so popular) concept of runtime warnings > Maurizio - jsr/ret deprecated (John: ACC_SUPER) - not used much - javac was > primary client at the time > StackMapTable added - lots of complaints > > What if long-term we were to derive arrays using multi-level constant pool > entries > What if we were to support Q[ as well as L arrays? > - immutable, non-nullable, identityless > > John: What if we were to evolve CONSTNAT_MethodType - currently a flat string > to use tree structured approach? > > Dan H: limited numbers of places we parse descriptors > Karen: don't slow down our resolution method and field lookup > Dan H: limited to resolution time > Dan S: might be faster to look up using tree comparison vs. extra long symbols > ed. note: worth exploring - just be really sure there is no potential for > ambiguity, > i.e. at any resolution step: do you have a match for X or Y > > --- > 4. Box and value implementation relationships > goal: reduce costs when boxing/unboxing > -e.g. same layout alignment for fields > - what if we could just change 1 bit in the carrier > > --- > 5. Opcode proposal: > drop vgetfield, overload getfield instead > Bjorn: concern - not want performance impact on existing opcodes > John: propose discard the extra defined opcode and leave room for quickening > > overload: anewarray, multianewarray > > Chat room notes on details: > John: > uses of C_Class as a class-file: this_class, PType head-type (template) uses > of C_Class as a type: ldc, > ?Field/Methodref? > Dan S: > Arbitrary types allowed: anewarray, multianewarray, structural descriptor, > ldc, bootstrap argument, > verification_type_info, maybe field/method refs > Reference types allowed: checkcast, instanceofReference > class/species allowed: super_class, interfaces, new, annotation, catch_type, > Exceptions > Plain class required: this_class, InnerClasses, EnclosingMethod, maybe > field/method refs > Maurizio: > was thinking the recently that InnerClasses is probably another 'classfile' > use > John: > Agree > ldc is not arbitrary type, b/c ldc int.class not possible; ldc is L-type only > > > >