Project Proposal: CompatibleChanges
Sebastian Sickelmann
sebastian.sickelmann at gmx.de
Mon Aug 20 11:46:28 UTC 2012
I want to add some more ideas what can be done in the CompatibleChanges
Project.
I also would add some tools that can help developers to check for binary
compatibility and to simplify the process of creating binary compatible
solutions.
Here are some samples:
- Integrate tools to check for binary compatiblity like :
https://github.com/lvc/japi-compliance-checker
- Tools that can help to create compatible serialization
implementations.
- Tools for visualisation serialization; create human
readable/comparable textual forms of serialization results.
I hope that someone have some more good ideas how we can
improve/simplify the creation of binary compatible changes.
-- Sebastian
Am 17.08.2012 10:15, schrieb Sebastian Sickelmann:
> In accordance with the OpenJDK guidelines [1], I would like to start
> discussion
> of a new Project to change the OpenJDK JVM implementation to make it
> possible to
> update java apis in ways that are not possible today.
>
> The goal of the CompatibleChanges Project will be to change the
> OpenJDK JVM implementation.
> It is not intented to change Java The-Language. Currently i there is
> one Proof of Concept[2]
> that shows the possible-usage in an example (remove public static- and
> instance-fields in a
> binary compatible way).
> The POC uses bytecode-rewrite at loadtime and invokedynamic at runtime
> to figure out
> which method to call instead of an fieldaccess. My initial suggest
> would be to
> change the JVMS-rules for Field Resolution and don't do it with
> instrumentation and
> invoke-dynamic.
>
> Real-Short Example:
> public class ClassToChange {
> public Throwable cause = new RuntimeException("INIT");
> public static Object staticField = "ORIG_VALUE";
> }
> Evolved Implementation:
> public class OLD {
> private Throwable cause = new RuntimeException("INIT");
> private static Object staticField = "ORIG_VALUE";
> @Accessor("cause") public Throwable getCause() { return cause; }
> @Accessor("cause") public void initCause(Throwable cause) {
> this.cause = cause; }
> @Accessor("staticField") public static Object getFoo() { return
> staticField; }
> @Accessor("staticField") public static void setFoo(Object value) {
> staticField = value; }
> }
>
>
> Some initial thoughts about Reflection-Changes and 3 ways of how the
> Field Resolution Rules can
> be changed are documented here[3]. It is written in the textual form
> of a JEP, but it is not
> intended to be a JEP.
>
> There is some initial feedback (on my first discussion request in
> jdk8-dev) by Brian Goetz
> and Joe Darcy back in Oct 2011[4].
>
> The initial committers are proposed to be: Sebastian Sickelmann
>
> Please discuss and let me know what you think.
>
> Thank you for your consideration,
>
> [1] http://openjdk.java.net/projects/#new-project
> [2]
> https://github.com/picpromusic/incubator/tree/projectProposal/jdk/compatibleFieldAccess
> [3]
> https://github.com/picpromusic/incubator/blob/projectProposal/jdk/compatibleFieldAccess/JEP.markdown
> [4]http://mail.openjdk.java.net/pipermail/jdk8-dev/2011-October/000199.html
>
More information about the discuss
mailing list