SableVM

Revision as of 05:52, 26 March 2023 by imported>InternetArchiveBot (Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.3) (Whoop whoop pull up - 12943)
(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)

{{#invoke:Infobox|infobox}}Template:Template other{{#invoke:Check for unknown parameters | check | showblankpositional=1 | unknown = Template:Main other | preview = Page using Template:Infobox software with unknown parameter "_VALUE_"|ignoreblank=y | AsOf | author | background | bodystyle | caption | collapsetext | collapsible | developer | discontinued | engine | engines | genre | included with | language | language count | language footnote | latest preview date | latest preview version | latest release date | latest release version | latest_preview_date | latest_preview_version | latest_release_date | latest_release_version | licence | license | logo | logo alt | logo caption | logo upright | logo size | logo title | logo_alt | logo_caption | logo_upright | logo_size | logo_title | middleware | module | name | operating system | operating_system | other_names | platform | programming language | programming_language | released | replaced_by | replaces | repo | screenshot | screenshot alt | screenshot upright | screenshot size | screenshot title | screenshot_alt | screenshot_upright | screenshot_size | screenshot_title | service_name | size | standard | title | ver layout | website | qid }}Template:Main other 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.Template: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.<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref><ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref><ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref>

OverviewEdit

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.<ref>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.</ref><ref>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.</ref> 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).Template: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 LanguageEdit

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.<ref>Eng, David. "JIL: an extensible intermediate language." Sable Research Group, McGill University (2002).</ref><ref>Eng, David. Combining static and dynamic data in code visualization. Vol. 28. No. 1. ACM, 2002.</ref> The language has not been widely adopted.

Consider the following piece of Java code. <syntaxhighlight lang="Java"> public MyClass implements MyInterface extends MySupperClass {

 int MyField;
 void MyMethod (double x, double y) {
   double z;
   z = x + y;
   this.MyField = z
 }

} </syntaxhighlight>

This piece can be expressed in the language, as follows: <syntaxhighlight lang="xml"> <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>
     <baf>
       <![CDATA[
         $r2 = $r0 + $r1;
         this.MyField = (double) $r2;
       ]]>
     </baf>
   </statements>
   </method>
 </methods>

</class> </jil> </syntaxhighlight>

See alsoEdit

Template:Portal

ReferencesEdit

Template:Reflist

External linksEdit

Template:Java Virtual Machine