![]() | |
Developer(s) | Sable Research Group at McGill University |
---|---|
Final release | 1.13
/ March 30, 2007 |
Repository | |
Operating system | Cross-platform |
Type | Java Virtual Machine |
License | GNU Lesser General Public License |
Website |
sablevm |
SableVM was a clean room implementation of Java bytecode interpreter 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]
The core engine is an interpreter which used ground-breaking techniques to deliver performance that can approach that of a "naive" just-in-time (JIT) compiler, while retaining the software engineering advantages of interpreters: portability, maintainability and simplicity. [4] [5] This simplicity makes SableVM's source code very accessible and easy to understand for new users/programmers.
SableVM is Free Software — it is licensed under the GNU Lesser General Public License ( LGPL). It also makes use of GNU Classpath (copyrighted by the FSF) which is licensed under the GNU General Public License with linking exception.
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.
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.
Consider the following piece of Java code.
public MyClass implements MyInterface extends MySupperClass {
int MyField;
void MyMethod (double x, double y) {
double z;
z = x + y;
this.MyField = z
}
}
This piece can be expressed in the language, as follows:
<jil>
<class name="MyClass" extends="MySupperClass">
<modifiers><modifier name="public" /></modifiers>
<interfaces><interface name="myinterface" /></interfaces>
<fields>
<field name="MyField" type="int" />
</fields>
<methods>
<method name="MyMethod" returntype="void">
<parameters>
<parameter name="x" type="double" />
<parameter name="y" type="double" />
</parameters>
<locals>
<local name="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>
{{
cite web}}
: CS1 maint: unfit URL (
link)