[movitz-devel] Re: Self-referential functions

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Fri Mar 19 09:10:18 UTC 2004


"Chris Capel" <chris at iBankTech.NET> writes:

> Ugh.  Let my try to sort this out.  Movitz has facilities for
> directly manipulating bits and bytes (binary-types package).

It is mostly movitz/storage-types.lisp that uses binary-types. The
major exception is movitz/image.lisp that defines the run-time context
structure, here named movitz-constant-block.

> Oh, wait it does.  I was just looking in the wrong place.  In
> movitz/losp/muerte/basic-macros.lisp, eq is defined as a compiler
> macro.  It's just that its defun is in equalp.lisp.  Ha!

The compiler-macros and corresponding functions are typically not
located together because really pretty much all the (compiler-) macros
must be defined before you have a sane compilation environment for
functions. So it's a bit of a mess, since I haven't really sorted this
out in a really principled manner.

> So everything is defined, in the first compiler's lisp, down to the
> bit and byte level.  In movitz/image.lisp, there resides code to
> make a binary bootable image out of all this.  Its job is basically
> to expand the lisp code into assembly and then into binary machine
> language.

The bits and pieces of making code-vectors from lisp code is of course
in movitz/compiler.lisp.

The image stuff is really a two-stage process. First, a symbolic-image
is constructed (by create-image). This is a big structure of the types
defined in movitz/storage-types.lisp, and represents "symbolically"
the movitz lisp-world.

Then, you can "dump" the symbolic-image to a bootable file. This is
what dump-image does, obviously. The same symbolic-image can be dumped
many times. You work interactively with the symbolic-image: Re-compile
and add functions, types, etc. as you do with interactive lisp
programming.

There are two other, more exotic variants of images. A stream-image is
(typically) a previously dumped image on file that is read back in. A
procfs-image, or really a bochs-image, is an image that accesses the
state of a bochs running movitz. Neither of these supports interactive
modification very much, but they support (static) introspection, and
the bochs-image supports some introspection of dynamic state,
e.g. backtrace.

One goal is to have a new kind of image that talks over a tty or
network connection to a running movitz (i.e. on actual hardware), so
that there can be real interactive development.

-- 
Frode Vatvedt Fjeld





More information about the movitz-devel mailing list