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