<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.6944.0">
<TITLE>RE: [movitz-devel] Self-referential functions</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->

<P><FONT SIZE=2>Ahh!  I saw the definitions of things like cons and cdr and car that<BR>
were defined using the assembly macros, and I understood those.  I sort<BR>
of understood the defmacro macro.  The piece I was missing was that the<BR>
first compiler *directly* translated certain operators, like eq.  But<BR>
wait, doesn't it do the same for car?  Why do you need an assembly<BR>
definition of car and cdr but not eq?<BR>
<BR>
Ugh.  Let my try to sort this out.  Movitz has facilities for directly<BR>
manipulating bits and bytes (binary-types package).  Upon these, it<BR>
builds facilities for translating x86 assembly into the binary opcodes<BR>
(ia-x86 package).  It defines basic operators in terms of these.  But it<BR>
doesn't need to define eq in binary?<BR>
<BR>
Oh, wait it does.  I was just looking in the wrong place.  In<BR>
movitz/losp/muerte/basic-macros.lisp, eq is defined as a compiler<BR>
macro.  It's just that its defun is in equalp.lisp.  Ha!<BR>
<BR>
So everything is defined, in the first compiler's lisp, down to the bit<BR>
and byte level.  In movitz/image.lisp, there resides code to make a<BR>
binary bootable image out of all this.  Its job is basically to expand<BR>
the lisp code into assembly and then into binary machine language. Once<BR>
this expansion is performed, you have defined the second, bootable,<BR>
lisp.<BR>
<BR>
I think I'm getting this, but please someone correct me if I got<BR>
something backwards.<BR>
<BR>
Chris Capel<BR>
<BR>
<BR>
-----Original Message-----<BR>
From: Nyef [<A HREF="mailto:nyef@softhome.net">mailto:nyef@softhome.net</A>]<BR>
Sent: Thu 3/18/2004 8:31 PM<BR>
To: Chris Capel<BR>
Cc: movitz-devel@common-lisp.net<BR>
Subject: Re: [movitz-devel] Self-referential functions<BR>
<BR>
The compiler knows how to open-code the function eq, that is,<BR>
it will turn a reference to eq into the equivalent machine code<BR>
inline. But you still need the function object to exist so that<BR>
it can be funcalled, grabbed with symbol-function, function,<BR>
etc. So what the definition does is tell the compiler to make a<BR>
function object, called eq, that performs the eq operation. RPG<BR>
mentions this same thing in Patterns Of Software about the Lisp<BR>
implementation that his company wrote.<BR>
<BR>
--Alastair Bridgewater<BR>
<BR>
<BR>
</FONT>
</P>

</BODY>
</HTML>