SableVM was a clean room implementation of Javabytecodeinterpreter implementing the Java virtual machine (VM) specification, second edition. SableVM was designed to be a robust, extremely portable, efficient, and fully specifications-compliant (JVM spec, Java Native Interface, Invocation interface, Debug interface, etc.) Java Virtual Machine that would be easy to maintain and to extend.[citation needed] It is now no longer being maintained.
The implementation was a part of the effort in the early 2000s to break the Java ecosystem free from Sun Microsystems's control.[1][2][3]
SableVM is the first open-source virtual machine for Java to include the support for JVMDI (Java Virtual Machine Debugging Interface) and JDWP (Java Debug Wire Protocol).[citation needed] These standard Java debugging interfaces are used for example by Eclipse to provide a rich and user-friendly Java development environment.
Java Intermediate Language
Some versions of the SableVM use Java Intermediate Language, an intermediate language (which is a subset of XML) representing the type structure of a Java program. The language was proposed by the team of SableVM in McGill University in January 2002 to aid the analysis of a Java program with the goals of scalability and good performance.[6][7] The language has not been widely adopted.
This piece can be expressed in the language, as follows:
<jil><classname="MyClass"extends="MySupperClass"><modifiers><modifiername="public"/></modifiers><interfaces><interfacename="myinterface"/></interfaces><fields><fieldname="MyField"type="int"/></fields><methods><methodname="MyMethod"returntype="void"><parameters><parametername="x"type="double"/><parametername="y"type="double"/></parameters><locals><localname="z"type="double"/></locals><statements><!-- Each statement is expressed by some intermediate format for code generator like three address code. In the below a language called baf is used. --><baf><![CDATA[ $r2 = $r0 + $r1; this.MyField = (double) $r2; ]]><!-- Here, we are assuming x is expressed as $r0, y $r1 and z $r2. --></baf></statements></method></methods></class></jil>
^Gagnon, Etienne M., and Laurie J. Hendren. "SableVM: A research framework for the efficient execution of Java bytecode." Proceedings of the Java Virtual Machine Research and Technology Symposium. Vol. 1. 2001.
^Prokopski, Gregory B., Etienne M. Gagnon, and Christian Arcand. Bytecode testing framework for SableVM code-copying engine. Technical Report SABLETR-2007-9, Sable Research Group, School of Computer Science, McGill University, Montréal, Québec, Canada, 2007.
^Eng, David. "JIL: an extensible intermediate language." Sable Research Group, McGill University (2002).
^Eng, David. Combining static and dynamic data in code visualization. Vol. 28. No. 1. ACM, 2002.