Valhalla EG 20191204
john.r.rose at oracle.com
Wed Dec 4 18:10:55 UTC 2019
Present: John R., Tobi A., Dan H., Remi F., Fred P.
(Permission slip for Simms, who had a school meeting.)
(Brian is off working on his eclair document…)
agenda: discussion of eclairs, invoke modes (virtual vs. interface)
ref-object vs. val-object (top types for inlines and refs)
NOT REACHED: templates, java.lang.Class vs. “crass"
Remi: auto-unboxing is the essential feature of eclairs
=> interface can be empty, except for supertypes
Dan: enforce sealing in VM? John: just a translation strategy hack, maybe
(Fred) VMAC can't have a sealed super, since the VMAC can't be named!
migration of java.util.Optional: auto-bridging? invokevirtual -> interface?
Dan: what rules/restrictions? Remi: see if it can be done with all interfaces
Dan: one CP entry needs to potentially support all invocation modes (even errors)
lots of corner cases in state transitions of resolution and selection
John: seems to require every methodref CP entry to support all invocation insns
Remi: can have a list of migrated interfaces and special-case those? (Dan: ugly)
if you have both invokeinterface and invokespecial you need three words!
John: MH-based linkage to handle invokevirtual -> invokeinterface
John: wrap a Method* metadata pointer around a MethodHandle managed pointer?
Dan: J9 allocates method wrappers contiguously, but maybe doable
more bang for the buck to do autobridging!
Dan: we had a list of use cases, still up to date?
AI: float a loose proposal
(Dan: looking at replacing with J9 MH impl Lambda Forms;
dual impls. make it harder to do decompilation for deoptimization and debug)
refobj vs. valobj?
Remi: you only need one; Dan: hard to do generics over negative types
can have compile-time ref-object type which erases to Object
John: java.lang.Record for inlines?
Remi: Record should be interface, with special permisison to implement toString
default methods cannot abstract Object methods, and cannot define finals
example: final toString method on lambda
example: JUnit5 can write, parameter of test is a factory, factory uses lambdas,
=> printed report has stupid names for lambdas — ouch
maybe "fat" serializable lambda should have a useful toString method? (“fatten” the interface with toString?)
More information about the valhalla-spec-observers