From: | Arch Robison <robison@kai.com> |
Newsgroups: | comp.compilers |
Date: | 3 Feb 1997 13:46:08 -0500 |
Organization: | Kuck & Associates, Inc. |
References: | <01bbfca0$a284a6f0$041b6682@tecel> 97-01-094 97-01-120 97-01-139 97-01-225 |
Keywords: | architecture, Java |
Bronikov@srv2.ic.net
In article 97-02-021 Dmitri Bronnikov writes:
>> Perhaps a better term for Java bytecode would be "preparsed source".
> Perhaps not. Java VM code is pretty much of the same level as any
> other VM. If you modified JVM addressing of operands to refer to
> offsets in stack, rather than bringing operands which happened to be
> not at the top using stack management instructions, then you'll get
> what one used to see in other machines "virtual or not".
No. The Java VM has a static typing rule that distinguishes it from
other virtual machines. See:
Java Intermediate Bytecodes, SIGPLAN Workshop on Intermediate
Representations, SIGPLAN Notices, March 1995, pp. 111-118
> And this I assume was not done to enable reverse compilation, Java
> VM chose not to define object reference size or representation -
> hence locals generally should not be allocated by javac. Method
> invocation/binding is again different due to mobility of Java.
Quite the opposite. The Java VM does define object reference size:
it's 32 bits. The reason for the JVM addressing (and much more) is
explained by Gosling himself (from the SIGPLAN article):
"The solution we chose was to compile to a byte coded machine-independent
instruction set that bears a certain resemblance to things like the UCSD
Pascal P-Code [Bowles78]. While compact and amenable to interpretation,
such a representation is, in general, unsuitable for higher-level, more
abstract, manipulation. We applied a number of twists: there is an
unusual amount of type information, there are restrictions on the use
of the operand stack, and there is a heavy reliance on symbolic
references and on-the-fly code rewriting."
> I'm far from being a Java or JVM lawyer, I rather belong to C++ cast. I'd
> say that JVM is not "just VM" because it's so much Java and not quite
> friendly/efficient for use with other languages.
That's proving my point: JVM bytecode is preparsed Java source. That's why
it does not work well as a target for C++.
> One java lawyer posted a reply in comp.compilers (quite some time ago) to
> those who requested expansion of JVM to suite C++, saying "why C++ people
> do not come up with VM for C/C++?". Indeed, why not?!
There already are. See http://www.cs.utah.edu/~ampsem/omniware.html .
Arch D. Robison Kuck & Associates Inc.
robison@kai.com 1906 Fox Drive
217-356-2288 Champaign IL 61820
Lead Developer for KAI C++ http://www.kai.com/C_plus_plus/index.html
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.