Hello world. I propose a new OpenJDK project[1],
the Multi-Language VM, to be abbreviated "mlvm",
and to be sponsored by the HotSpot group[2].
This project will be open for prototyping
JVM features aimed at efficiently supporting
languages other than Java.
The emphasis will be on completing the existing
bytecode and execution architecture with general
purpose extensions, as opposed to a new feature
for just one language, or adjoining an unrelated
new execution model.
The emphasis will also be on work which removes
"pain points" already observed by implementors
of successful or influential languages, as opposed
to more speculative work on unproven features or
niche languages.
Virtual machines produced by this project will
be standards-conforming, in that they will not change
the meaning or behavior of existing Java classes
and classfile formats. They may define variations
or extensions of the class format, or new kinds of
objects, whose meaning and behavior are beyond
the scope of current Java and JVM specifications.
However, these extended codes and data structures
will interoperate as much as possible with Java objects.
In addition, as a way of delimiting separate prototyping
efforts, each new feature will come with a switch which
turns it off, and that switch will be "off" by default.
This is the approach used in the Kitchen Sink Language
project.[3]
This proposal refines and completes a partial proposal
I sent earlier this year to the HotSpot project,
a proposal for a "Kitchen Sink VM"[4]. The present
proposal is more specifically directed at supporting
new languages (i.e., those languages which are
new to the JVM).
Here are some examples of features that could be
prototyped in this project, if developers were found
who are willing and able:
- tail calls and tail recursion [5]
- continuations and coroutines [6]
- tuples and value-oriented types [7]
- lightweight method objects [8]
- runtime support for closures [9]
- invokedynamic [10]
Prototyping for JSR 292[11] is likely to occur as
a part of this project. Note that none of the above
suggested features is specific to any single language.
As the current OpenJDK Project guidelines request,
please send followups to the discussion list.[12]
Thanks very much for your attention to this matter,
-- John Rose
http://blogs.sun.com/jrose/
[1] http://openjdk.java.net/projects/
[2] http://openjdk.java.net/groups/hotspot/
[3] http://ksl.dev.java.net/ (Kitchen Sink Language)
[4] http://mail.openjdk.java.net/pipermail/hotspot-dev/2007-July/
000091.html (Kitchen Sink VM)
[5] http://blogs.sun.com/jrose/entry/tail_calls_in_the_vm
[6] http://lambda-the-ultimate.org/node/1002 (Continuations for Java)
[7] http://blogs.sun.com/jrose/entry/tuples_in_the_vm
[8] http://groups.google.com/group/jvm-languages/t/dbc3a4a382868904
(Lightweight Methods)
[9] http://www.javac.info/ (Java Closures)
[10] http://groups.google.com/group/jvm-languages/web/implementation-
of-multimethods-in-jvm-languages
[11] http://jcp.org/en/jsr/detail?id=292#2 (Original JSR 292 request)
[12] http://mail.openjdk.java.net/mailman/listinfo/discuss