|machine code vs. byte codes email@example.com (Mark) (1999-03-28)|
|Re: machine code vs. byte codes firstname.lastname@example.org (1999-04-01)|
|Re: machine code vs. byte codes email@example.com (Steven D. Majewski) (1999-04-03)|
|From:||"Steven D. Majewski" <firstname.lastname@example.org>|
|Date:||3 Apr 1999 21:55:37 -0500|
|Organization:||University of Virginia|
>> I'm working a compiler that compiles a very simple C-like language.
>> For the most part the source code will be compiled to byte codes and
>> interpreted, however certain parts can be compiled to machine code.
>In that case you can mix byte code and machine code. Just use one byte
>code to escape to inline machine code where appropriate. When the
>inline code returns to the byte code interpreter it must inform the
>interpreter of the new byte code Instruction Pointer. This can be
>implemented by a Jump SubRoutine back to the interpreter at the end of
>the inline code. The return address of the JSR will identify the new
Another more flexible mechanism, which is what Forth uses, is the
inverse of having an escape (to native code) code:
Forth WORDS have a Code Field Address and a Parameter Field Address.
The CFA points to the code used to interpret the PFA.
For words defined in forth, the Parameter Field contains the
compiled threaded code and the CFA points to the threaded code
For either built-in primitives or words defined in assembler lang.,
the CFA points to the Parameter Field, which containing
machine code, is 'self-interpreting'.
This mechanism is extensible: Forth had a proto Object-Oriented
mechanism with the BUILDS/DOES pair, which defines a data
structure and defines a function -- often an accessor function -
to 'DO' the structure. The WORD defined by BUILDS is the
generator for new objects, and the word defined by DOES is the
function that gets executed by those objects. This is the high-level
version of setting the CFA & PFA .
I've seen some new interest in this sort of mechanism due to the
ubiquity of JAVA VMs: This is one way to link language implementations
that have their own Virtual Machines interpreters and byte-code, like
Python and Lisp for example, with compiled Java code and native code
---| Steven D. Majewski (804-982-0831) <sdm7g@Virginia.EDU> |---
---| Department of Molecular Physiology and Biological Physics |---
---| University of Virginia Health Sciences Center |---
---| P.O. Box 10011 Charlottesville, VA 22906-0011 |---
Return to the
Search the comp.compilers archives again.