I was trying to get a feel for what the capabilities
of the result
might be. With 32Kw of memory, if you could get, say, 10K cons cells
+ atoms, would that be an interesting system? Or would it be too
tiny to be useful?
Depends on what you count as useful.
I just did a rudimentary test. I have a Lisp engine of my own. It is
comparable to Scheme only in that they both recognizably belong to the
Lisp family.
I started it up and let it execute its startup code. It has hooks that
expose internal stats of the memory allocation code to Lisp
examination: I used them to see what was in use. The results:
[Dualicious] 11> lisp
-> (progn (mapc #'(lambda (x) (print x) (terpri)) (gc-stats)) (values))
(%float (%gccount . 0) (%inuse . 0) (%free . 0) (%collected . 0))
(%symbol (%gccount . 1) (%inuse . 716) (%free . 881) (%collected . 0))
(%cons (%gccount . 3) (%inuse . 5521) (%free . 36401) (%collected . 116487))
(%string (%gccount . 1) (%inuse . 726) (%free . 4313) (%collected . 7))
(%spiece (%gccount . 1) (%inuse . 725) (%free . 4314) (%collected . 7))
(%sbuf (%gccount . 1) (%inuse . 724) (%free . 6555) (%collected . 7))
(%regex (%gccount . 0) (%inuse . 0) (%free . 0) (%collected . 0))
(%rematch (%gccount . 0) (%inuse . 0) (%free . 0) (%collected . 0))
(%stream (%gccount . 1) (%inuse . 4) (%free . 1332) (%collected . 0))
(%readtable (%gccount . 1) (%inuse . 1) (%free . 18) (%collected . 0))
(%closure (%gccount . 0) (%inuse . 19) (%free . 2601) (%collected . 99))
(%binding (%gccount . 0) (%inuse . 206) (%free . 2414) (%collected . 5364))
(%thread (%gccount . 1) (%inuse . 1) (%free . 948) (%collected . 0))
(%mvalue (%gccount . 0) (%inuse . 32) (%free . 7247) (%collected . 2901))
(%evc (%gccount . 0) (%inuse . 24) (%free . 5015) (%collected . 169))
(%contin (%gccount . 0) (%inuse . 0) (%free . 0) (%collected . 0))
(%gcnotice (%gccount . 0) (%inuse . 0) (%free . 0) (%collected . 0))
(%package (%gccount . 1) (%inuse . 1) (%free . 3852) (%collected . 0))
(%interning (%gccount . 1) (%inuse . 694) (%free . 2425) (%collected . 0))
(%ilistroot (%gccount . 1) (%inuse . 693) (%free . 12409) (%collected . 0))
(%error (%gccount . 0) (%inuse . 0) (%free . 0) (%collected . 0))
(%array (%gccount . 0) (%inuse . 0) (%free . 0) (%collected . 0))
(%mutex (%gccount . 0) (%inuse . 0) (%free . 0) (%collected . 0))
(%condvar (%gccount . 0) (%inuse . 0) (%free . 0) (%collected . 0))
(%pipe (%gccount . 0) (%inuse . 0) (%free . 0) (%collected . 0))
(%tio (%gccount . 0) (%inuse . 0) (%free . 0) (%collected . 0))
(%tsize (%gccount . 0) (%inuse . 0) (%free . 0) (%collected . 0))
(%buffer (%gccount . 0) (%inuse . 0) (%free . 0) (%collected . 0))
(%marker (%gccount . 0) (%inuse . 0) (%free . 0) (%collected . 0))
(%window (%gccount . 0) (%inuse . 0) (%free . 0) (%collected . 0))
(%screen (%gccount . 1) (%inuse . 1) (%free . 1454) (%collected . 0))
(%fd (%gccount . 0) (%inuse . 0) (%free . 0) (%collected . 0))
(%hash (%gccount . 0) (%inuse . 0) (%free . 0) (%collected . 0))
(%gc (%gccount . 4) (%lisp . 1))
->
So, to the extent to which this is a fair illustration (which it may
well not be), 10K things should be enough to do stuff. (The startup
code defines a bunch of things, such as defun, the # macro, and setf,
which are important but not actually built into the engine, and
includes the top-level read-eval-print loop. 476 lines.)
/~\ The ASCII Mouse
\ / Ribbon Campaign
X Against HTML mouse at
rodents-montreal.org
/ \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B