Subject: Re: The final piece of the puzzle: Assignment
From: rpw3@rpw3.org (Rob Warnock)
Date: Wed, 26 Feb 2003 03:51:04 -0600
Newsgroups: comp.lang.lisp
Message-ID: <zP2cnU8rsY2VE8GjXTWc-g@speakeasy.net>
Barry Margolin  <barry.margolin@level3.com> wrote:
+---------------
| Rob Warnock <rpw3@rpw3.org> wrote:
| >Also remember that there have been implementations of GC'd languages in
| >the past -- classic Smalltalk comes to mind -- where the object identifiers
| >were *NOT* pointers at all, but fairly-small indices into a global "object
| >table"
| 
| Isn't that what an address is?  In this case, the "global object table" is
| all of memory.
| 
| At the conceptual level, these things are all isomorphic.
+---------------

Well, you've introduced yet another term -- "conceptual level" -- that
needs to be more precisely defined before I can know whether or not I
agree with you!  ;-}  ;-}

But what I was trying to point out was that (1) the things that EQ
compares need not be "machine addresses" even for heap-allocated
objects, and (2) that you can have a compacting garbage collector
that does *not* need to re-write the object identifier values held
in variables or other objects when the designated object is moved
around in machine memory. I.e., in such a system the machine address
of an object can change *without* its object identifier (or whatever
you want to call such a thing) changing.

Viewed at the level of writing such a GC, or of writing, say, C code
that has to access Lisp objects, address-based Lisp values and OID-based
Lisp values are not *quite* isomorphic. Certainly not in terms of
performance (which, by the way, can go *either* way, if you consider
sufficiently perverted test cases).

But maybe I'm quibbling...


-Rob

-----
Rob Warnock, PP-ASEL-IA		<rpw3@rpw3.org>
627 26th Avenue			<URL:http://rpw3.org/>
San Mateo, CA 94403		(650)572-2607