The SPITBOL Project is pleased to announce that Unix SPITBOL 13.01 is available.
It can be downloaded from Github: HARDBOL/SPITBOL:
This release supports floating-point arithmetic and save files. Load modules and the loading of external functions are still not supported.
2 Comments
Neat!
Oh my heavens, it has a generational GC of sorts (the “sediment” described in the big GBCOL comment around line 20452 in the s.min file). An in-place, compacting, mark-sweep GC that (mostly) only touches ephemeral data in the heap, since longer-lived stuff stays in the sediment and doesn’t get scanned. I guess this has to depend on pointer fields never mutating between GC calls?
I’m not enough of a loremeister to know whether this scheme is/was widely used in smaller Lisp implementations, but it’s pretty clever. I guess all blocks have to be of some minimal size since unmarked blocks get overwritten with some relocation pointers to tell the compaction phase where to move the marked blocks. So small integers shouldn’t go in the heap, etc.
This is just going by the block comments. I haven’t tried understanding the MINIMAL code. I guess I should do that. I’m thinking of trying to port the algorithm for a small Lisp that I sometimes mess with, that happens to have immutable data.
Do you know if Spitbol 360 worked the same way?