[virtmach] Definition a virtual machine ?

Francois-Rene Rideau fare@tunes.org
Wed, 17 Nov 1999 17:43:00 +0100

On Wed, Nov 17, 1999 at 12:22:07PM +0000, David Rush wrote:
>> Although I agree that a virtual machine may very well
>> be described in terms of an abstract grammar (whose nodes are roughly
>> categorized by an "API"), without any specification for the underlying
>> representation of syntax trees.
> Examples? Web-pointers? I find this notion fascinating. Has anyone
> written a VM compiler using these kind of tools?

Well, if you want interoperation at some level, you'll still need define
a common representation somewhere at that level. Which begins at the
very source level (but the dead weight of proprietary software has made
people reluctant to ship anything like source code).
For instance, using a reasonably portable language such as
CommonLISP, Scheme, Haskell, OCaml, or Java, you could just exchange
source code as your standard representation.

Compressed (gzipped?) Scheme source code is precisely what David Halls'
PhD thesis' Tube system does, which works accross Scheme implementations,
assuming you have underlying support for listening to a TCP/IP socket,
and preferably have some multithreading to answer many requests in parallel.
The methods described by dah28 are portable accross Scheme implementations,
assuming they provide these non-standard extensions; dah28 mainly used
Bigloo, and had a prototype in Kawa (over the JVM).
David Halls (last known e-mail daveh@persimmon.co.uk) had his thesis online
at his home page but it's not there anymore. If anyone can contact him
for permission, I'll be glad to republish the mirror I have of his site.

Juice (the system used by many Oberon systems to ship portable binaries)
consists in a standard compressed representation of stripped
Oberon syntax trees.

If I understand correctly, ANDF uses some kind of standardized abstract
syntax tree representation for a 32-bit low-level language (C-like?
assembly-like?). I admit I never dug too deep into ANDF, and the pointers
I had on ANDF papers are now broken. Help sought.

A recent attempt on a source-level semi-portable interchange format is

As for bytecodes, the whole idea of compiling to bytecode that JITs/whatever
will begin by decompiling back to abstract syntax trees seems stupid to me.
I think bytecode are a wonderful implementation technique,
extremely useful to build quick&dirty portable prototypes,
or to be portably deployed in resource-poor environments
(such as OpenFirmware http://www.firmworks.com/www/ofw.htm).
But they look to me as quite laughable as an industry standard for
deployment of high-level code between reasonably resource-rich machines.
And of course, the ultimate, most ubiquituous, byte-code interpreted
virtual machine, is the i386 family of processors.

Again, I invite you to visit my page on virtual machines,
to send me enhancements to it (comments, corrections, new pointers),
or even better, to take it over.

[ "Faré" | VN: Уng-Vû Bân | Join the TUNES project!   http://www.tunes.org/  ]
[ FR: François-René Rideau | TUNES is a Useful, Nevertheless Expedient System ]
[ Reflection&Cybernethics  | Project for  a Free Reflective  Computing System ]
Don't have good ideas if you aren't willing to be responsible for them.
	-- Alan Perlis