Factor interpreter in C
Slava Pestov — 2004-06-26 06:01:28
Hi everybody,
For the last week or so I've been working on a new Factor interpreter
written in C.
It is similar in design to the Java interpreter. The major difference is
how automatic persistence is handled.
In the C interpreter, a workspace image is simply a dump of the Factor
heap. Images do not contain native code -- only Factor data structures
such as literals, cons cells, arrays etc.
The C interpreter cannot directly read Factor source files -- it needs a
binary image.
I have developed a "cross-compiler" that runs in the Java interpreter
and compiles Factor word definitions to an image file suitable for the C VM.
It is already possible to cross-compile a few of the simpler Factor
library functions such as "append", "length", "fib" into a new image,
and load the image in the C VM. It even gives the correct result some of
the time :-)
Eventually the goal is to write a Factor parser in Factor, and
cross-compile this to create the first 'bootstrap' image.
Once this is done, the C VM will be usable interactively, and will also
be able to load its own sources and generate new images.
The C core is only 800 lines of code or so and already provides a good
base of functionality. The remaining tasks at the VM level are:
- Garbage collection (!)
- Exception system
- Remaining data types: vector, string, more number types
- Growable stacks
- Exposing primitives for file and network streams
Right now a compiled and stripped VM binary is 8k and When functionally
complete I expect it to maybe be double that. This means the entire
thing will fit in the L1 cache of most CPUs.
A deliberate design goal of the C VM is that it will not use more than
one native OS thread. A lightweight co-operative multitasking and
non-blocking I/O API using continuations will be added later.
Slava
John Cowan — 2004-06-28 13:50:38
Slava Pestov scripsit:
> - Garbage collection (!)
Consider using the Boehm-Demers-Weiser conservative garbage collector
that Joy uses. GC is a hard problem and there's no reason for you
to solve it yourself. See
http://www.hpl.hp.com/personal/Hans_Boehm/gc/ .
Note that the space and time overhead is only slightly worse than
that of typical malloc/free implementations.
--
What is the sound of Perl? Is it not the John Cowan
sound of a [Ww]all that people have stopped
cowan@...
banging their head against? --Larry
http://www.ccil.org/~cowan
Chris Double — 2004-06-28 22:14:13
On Mon, 28 Jun 2004 09:50:38 -0400, "John Cowan" <cowan@...> said:
> Slava Pestov scripsit:
>
> > - Garbage collection (!)
>
> Consider using the Boehm-Demers-Weiser conservative garbage collector
> that Joy uses. GC is a hard problem and there's no reason for you
> to solve it yourself. See http://www.hpl.hp.com/personal/Hans_Boehm/gc/
Another 'off the shelf' solution is Ravenbrooks Memory Pool System:
http://www.ravenbrook.com/project/mps/
This is open source and is the garbage collector used in Functional
Developer (http://www.functionalobjects.com), a commercial (and recently
open sourced) Dylan development system.
Chris.
--
Chris Double
chris.double@...