From 914c35ead0510d6ae3e32336cd94e6f890db8287 Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Tue, 24 Mar 2026 16:25:09 +0000 Subject: [PATCH] Moved legacy code into archive, ready for a new rapid(?) prototype. I may regret doing this! --- {src => archive}/c/arith/integer.c | 0 {src => archive}/c/arith/integer.h | 0 {src => archive}/c/arith/peano.c | 0 {src => archive}/c/arith/peano.h | 0 {src => archive}/c/arith/ratio.c | 0 {src => archive}/c/arith/ratio.h | 0 {src => archive}/c/arith/real.c | 0 {src => archive}/c/arith/real.h | 0 {src => archive}/c/authorise.c | 0 {src => archive}/c/authorise.h | 0 {src => archive}/c/debug.c | 0 {src => archive}/c/debug.h | 0 {src => archive}/c/init.c | 0 {src => archive}/c/io/fopen.c | 0 {src => archive}/c/io/fopen.h | 0 {src => archive}/c/io/history.c | 0 {src => archive}/c/io/history.h | 0 {src => archive}/c/io/io.c | 0 {src => archive}/c/io/io.h | 0 {src => archive}/c/io/print.c | 0 {src => archive}/c/io/print.h | 0 {src => archive}/c/io/read.c | 0 {src => archive}/c/io/read.h | 0 {src => archive}/c/memory/conspage.c | 0 {src => archive}/c/memory/conspage.h | 0 {src => archive}/c/memory/consspaceobject.c | 0 {src => archive}/c/memory/consspaceobject.h | 0 {src => archive}/c/memory/cursor.c | 0 {src => archive}/c/memory/cursor.h | Bin {src => archive}/c/memory/dump.c | 0 {src => archive}/c/memory/dump.h | 0 {src => archive}/c/memory/hashmap.c | 0 {src => archive}/c/memory/hashmap.h | 0 {src => archive}/c/memory/lookup3.c | 0 {src => archive}/c/memory/lookup3.h | 0 {src => archive}/c/memory/stack.c | 0 {src => archive}/c/memory/stack.h | 0 {src => archive}/c/memory/vectorspace.c | 0 {src => archive}/c/memory/vectorspace.h | 0 {src => archive}/c/ops/equal.c | 0 {src => archive}/c/ops/equal.h | 0 {src => archive}/c/ops/intern.c | 0 {src => archive}/c/ops/intern.h | 0 {src => archive}/c/ops/lispops.c | 0 {src => archive}/c/ops/lispops.h | 0 {src => archive}/c/ops/loop.c | 0 {src => archive}/c/ops/loop.h | 0 {src => archive}/c/ops/meta.c | 0 {src => archive}/c/ops/meta.h | 0 {src => archive}/c/repl.c | 0 {src => archive}/c/repl.h | 0 {src => archive}/c/time/psse_time.c | 0 {src => archive}/c/time/psse_time.h | 0 {src => archive}/c/utils.c | 0 {src => archive}/c/utils.h | 0 {src => archive}/c/version.h | 0 {unit-tests => archive/unit-tests}/add.sh | 0 .../allocation-tests/allocation-tester.sh | 0 .../allocation-tests/allocation-tests.csv | 0 .../allocation-tests/allocation-tests.ods | Bin 0 -> 32991 bytes .../allocation-tests/feature-2.test.tmp | 30 +++++++++ archive/unit-tests/allocation-tests/grep.bb | 19 ++++++ .../unit-tests}/allocation-tests/test-forms | 0 {unit-tests => archive/unit-tests}/append.sh | 0 {unit-tests => archive/unit-tests}/apply.sh | 0 archive/unit-tests/assoc.sh | 60 ++++++++++++++++++ .../unit-tests}/bignum-add.sh | 0 .../unit-tests}/bignum-expt.sh | 0 .../unit-tests}/bignum-print.sh | 0 .../unit-tests}/bignum-subtract.sh | 0 {unit-tests => archive/unit-tests}/bignum.sh | 0 .../unit-tests}/complex-list.sh | 0 {unit-tests => archive/unit-tests}/cond.sh | 0 .../unit-tests}/empty-list.sh | 0 .../unit-tests}/empty-string.sh | 0 {unit-tests => archive/unit-tests}/equal.sh | 0 .../unit-tests}/eval-integer.sh | 0 .../unit-tests}/eval-quote-sexpr.sh | 0 .../unit-tests}/eval-quote-symbol.sh | 0 .../unit-tests}/eval-real.sh | 0 .../unit-tests}/eval-string.sh | 0 {unit-tests => archive/unit-tests}/fred.sh | 0 .../unit-tests}/integer-allocation.sh | 0 {unit-tests => archive/unit-tests}/integer.sh | 0 .../unit-tests}/interpreter.sh | 0 {unit-tests => archive/unit-tests}/lambda.sh | 0 {unit-tests => archive/unit-tests}/let.sh | 0 .../unit-tests}/list-test.sh | 0 .../unit-tests}/many-args.sh | 0 {unit-tests => archive/unit-tests}/map.sh | 0 archive/unit-tests/mapcar.sh | 31 +++++++++ {unit-tests => archive/unit-tests}/memberp.sh | 0 {unit-tests => archive/unit-tests}/memory.sh | 0 .../unit-tests}/multiply.sh | 0 {unit-tests => archive/unit-tests}/nil.sh | 0 {unit-tests => archive/unit-tests}/nlambda.sh | 0 .../unit-tests}/path-notation.sh | 0 {unit-tests => archive/unit-tests}/progn.sh | 0 {unit-tests => archive/unit-tests}/quote.sh | 0 .../unit-tests}/quoted-list.sh | 0 .../unit-tests}/ratio-addition.sh | 0 .../unit-tests}/recursion.sh | 0 {unit-tests => archive/unit-tests}/reverse.sh | 0 .../unit-tests}/simple-list.sh | 0 {unit-tests => archive/unit-tests}/slurp.sh | 0 .../unit-tests}/string-allocation.sh | 0 .../unit-tests}/string-cons.sh | 0 .../unit-tests}/string-with-spaces.sh | 0 .../unit-tests}/subtract.sh | 0 {unit-tests => archive/unit-tests}/try.sh | 0 {unit-tests => archive/unit-tests}/varargs.sh | 0 .../unit-tests}/wide-character.sh | 0 docs/Paged-space-objects.md | 2 +- docs/State-of-play.md | 24 +++++++ 114 files changed, 165 insertions(+), 1 deletion(-) rename {src => archive}/c/arith/integer.c (100%) rename {src => archive}/c/arith/integer.h (100%) rename {src => archive}/c/arith/peano.c (100%) rename {src => archive}/c/arith/peano.h (100%) rename {src => archive}/c/arith/ratio.c (100%) rename {src => archive}/c/arith/ratio.h (100%) rename {src => archive}/c/arith/real.c (100%) rename {src => archive}/c/arith/real.h (100%) rename {src => archive}/c/authorise.c (100%) rename {src => archive}/c/authorise.h (100%) rename {src => archive}/c/debug.c (100%) rename {src => archive}/c/debug.h (100%) rename {src => archive}/c/init.c (100%) rename {src => archive}/c/io/fopen.c (100%) rename {src => archive}/c/io/fopen.h (100%) rename {src => archive}/c/io/history.c (100%) rename {src => archive}/c/io/history.h (100%) rename {src => archive}/c/io/io.c (100%) rename {src => archive}/c/io/io.h (100%) rename {src => archive}/c/io/print.c (100%) rename {src => archive}/c/io/print.h (100%) rename {src => archive}/c/io/read.c (100%) rename {src => archive}/c/io/read.h (100%) rename {src => archive}/c/memory/conspage.c (100%) rename {src => archive}/c/memory/conspage.h (100%) rename {src => archive}/c/memory/consspaceobject.c (100%) rename {src => archive}/c/memory/consspaceobject.h (100%) rename {src => archive}/c/memory/cursor.c (100%) rename {src => archive}/c/memory/cursor.h (100%) rename {src => archive}/c/memory/dump.c (100%) rename {src => archive}/c/memory/dump.h (100%) rename {src => archive}/c/memory/hashmap.c (100%) rename {src => archive}/c/memory/hashmap.h (100%) rename {src => archive}/c/memory/lookup3.c (100%) rename {src => archive}/c/memory/lookup3.h (100%) rename {src => archive}/c/memory/stack.c (100%) rename {src => archive}/c/memory/stack.h (100%) rename {src => archive}/c/memory/vectorspace.c (100%) rename {src => archive}/c/memory/vectorspace.h (100%) rename {src => archive}/c/ops/equal.c (100%) rename {src => archive}/c/ops/equal.h (100%) rename {src => archive}/c/ops/intern.c (100%) rename {src => archive}/c/ops/intern.h (100%) rename {src => archive}/c/ops/lispops.c (100%) rename {src => archive}/c/ops/lispops.h (100%) rename {src => archive}/c/ops/loop.c (100%) rename {src => archive}/c/ops/loop.h (100%) rename {src => archive}/c/ops/meta.c (100%) rename {src => archive}/c/ops/meta.h (100%) rename {src => archive}/c/repl.c (100%) rename {src => archive}/c/repl.h (100%) rename {src => archive}/c/time/psse_time.c (100%) rename {src => archive}/c/time/psse_time.h (100%) rename {src => archive}/c/utils.c (100%) rename {src => archive}/c/utils.h (100%) rename {src => archive}/c/version.h (100%) rename {unit-tests => archive/unit-tests}/add.sh (100%) rename {unit-tests => archive/unit-tests}/allocation-tests/allocation-tester.sh (100%) rename {unit-tests => archive/unit-tests}/allocation-tests/allocation-tests.csv (100%) create mode 100644 archive/unit-tests/allocation-tests/allocation-tests.ods create mode 100644 archive/unit-tests/allocation-tests/feature-2.test.tmp create mode 100755 archive/unit-tests/allocation-tests/grep.bb rename {unit-tests => archive/unit-tests}/allocation-tests/test-forms (100%) rename {unit-tests => archive/unit-tests}/append.sh (100%) rename {unit-tests => archive/unit-tests}/apply.sh (100%) create mode 100644 archive/unit-tests/assoc.sh rename {unit-tests => archive/unit-tests}/bignum-add.sh (100%) rename {unit-tests => archive/unit-tests}/bignum-expt.sh (100%) rename {unit-tests => archive/unit-tests}/bignum-print.sh (100%) rename {unit-tests => archive/unit-tests}/bignum-subtract.sh (100%) rename {unit-tests => archive/unit-tests}/bignum.sh (100%) rename {unit-tests => archive/unit-tests}/complex-list.sh (100%) rename {unit-tests => archive/unit-tests}/cond.sh (100%) rename {unit-tests => archive/unit-tests}/empty-list.sh (100%) rename {unit-tests => archive/unit-tests}/empty-string.sh (100%) rename {unit-tests => archive/unit-tests}/equal.sh (100%) rename {unit-tests => archive/unit-tests}/eval-integer.sh (100%) rename {unit-tests => archive/unit-tests}/eval-quote-sexpr.sh (100%) rename {unit-tests => archive/unit-tests}/eval-quote-symbol.sh (100%) rename {unit-tests => archive/unit-tests}/eval-real.sh (100%) rename {unit-tests => archive/unit-tests}/eval-string.sh (100%) rename {unit-tests => archive/unit-tests}/fred.sh (100%) rename {unit-tests => archive/unit-tests}/integer-allocation.sh (100%) rename {unit-tests => archive/unit-tests}/integer.sh (100%) rename {unit-tests => archive/unit-tests}/interpreter.sh (100%) rename {unit-tests => archive/unit-tests}/lambda.sh (100%) rename {unit-tests => archive/unit-tests}/let.sh (100%) rename {unit-tests => archive/unit-tests}/list-test.sh (100%) rename {unit-tests => archive/unit-tests}/many-args.sh (100%) rename {unit-tests => archive/unit-tests}/map.sh (100%) create mode 100644 archive/unit-tests/mapcar.sh rename {unit-tests => archive/unit-tests}/memberp.sh (100%) rename {unit-tests => archive/unit-tests}/memory.sh (100%) rename {unit-tests => archive/unit-tests}/multiply.sh (100%) rename {unit-tests => archive/unit-tests}/nil.sh (100%) rename {unit-tests => archive/unit-tests}/nlambda.sh (100%) rename {unit-tests => archive/unit-tests}/path-notation.sh (100%) rename {unit-tests => archive/unit-tests}/progn.sh (100%) rename {unit-tests => archive/unit-tests}/quote.sh (100%) rename {unit-tests => archive/unit-tests}/quoted-list.sh (100%) rename {unit-tests => archive/unit-tests}/ratio-addition.sh (100%) rename {unit-tests => archive/unit-tests}/recursion.sh (100%) rename {unit-tests => archive/unit-tests}/reverse.sh (100%) rename {unit-tests => archive/unit-tests}/simple-list.sh (100%) rename {unit-tests => archive/unit-tests}/slurp.sh (100%) rename {unit-tests => archive/unit-tests}/string-allocation.sh (100%) rename {unit-tests => archive/unit-tests}/string-cons.sh (100%) rename {unit-tests => archive/unit-tests}/string-with-spaces.sh (100%) rename {unit-tests => archive/unit-tests}/subtract.sh (100%) rename {unit-tests => archive/unit-tests}/try.sh (100%) rename {unit-tests => archive/unit-tests}/varargs.sh (100%) rename {unit-tests => archive/unit-tests}/wide-character.sh (100%) diff --git a/src/c/arith/integer.c b/archive/c/arith/integer.c similarity index 100% rename from src/c/arith/integer.c rename to archive/c/arith/integer.c diff --git a/src/c/arith/integer.h b/archive/c/arith/integer.h similarity index 100% rename from src/c/arith/integer.h rename to archive/c/arith/integer.h diff --git a/src/c/arith/peano.c b/archive/c/arith/peano.c similarity index 100% rename from src/c/arith/peano.c rename to archive/c/arith/peano.c diff --git a/src/c/arith/peano.h b/archive/c/arith/peano.h similarity index 100% rename from src/c/arith/peano.h rename to archive/c/arith/peano.h diff --git a/src/c/arith/ratio.c b/archive/c/arith/ratio.c similarity index 100% rename from src/c/arith/ratio.c rename to archive/c/arith/ratio.c diff --git a/src/c/arith/ratio.h b/archive/c/arith/ratio.h similarity index 100% rename from src/c/arith/ratio.h rename to archive/c/arith/ratio.h diff --git a/src/c/arith/real.c b/archive/c/arith/real.c similarity index 100% rename from src/c/arith/real.c rename to archive/c/arith/real.c diff --git a/src/c/arith/real.h b/archive/c/arith/real.h similarity index 100% rename from src/c/arith/real.h rename to archive/c/arith/real.h diff --git a/src/c/authorise.c b/archive/c/authorise.c similarity index 100% rename from src/c/authorise.c rename to archive/c/authorise.c diff --git a/src/c/authorise.h b/archive/c/authorise.h similarity index 100% rename from src/c/authorise.h rename to archive/c/authorise.h diff --git a/src/c/debug.c b/archive/c/debug.c similarity index 100% rename from src/c/debug.c rename to archive/c/debug.c diff --git a/src/c/debug.h b/archive/c/debug.h similarity index 100% rename from src/c/debug.h rename to archive/c/debug.h diff --git a/src/c/init.c b/archive/c/init.c similarity index 100% rename from src/c/init.c rename to archive/c/init.c diff --git a/src/c/io/fopen.c b/archive/c/io/fopen.c similarity index 100% rename from src/c/io/fopen.c rename to archive/c/io/fopen.c diff --git a/src/c/io/fopen.h b/archive/c/io/fopen.h similarity index 100% rename from src/c/io/fopen.h rename to archive/c/io/fopen.h diff --git a/src/c/io/history.c b/archive/c/io/history.c similarity index 100% rename from src/c/io/history.c rename to archive/c/io/history.c diff --git a/src/c/io/history.h b/archive/c/io/history.h similarity index 100% rename from src/c/io/history.h rename to archive/c/io/history.h diff --git a/src/c/io/io.c b/archive/c/io/io.c similarity index 100% rename from src/c/io/io.c rename to archive/c/io/io.c diff --git a/src/c/io/io.h b/archive/c/io/io.h similarity index 100% rename from src/c/io/io.h rename to archive/c/io/io.h diff --git a/src/c/io/print.c b/archive/c/io/print.c similarity index 100% rename from src/c/io/print.c rename to archive/c/io/print.c diff --git a/src/c/io/print.h b/archive/c/io/print.h similarity index 100% rename from src/c/io/print.h rename to archive/c/io/print.h diff --git a/src/c/io/read.c b/archive/c/io/read.c similarity index 100% rename from src/c/io/read.c rename to archive/c/io/read.c diff --git a/src/c/io/read.h b/archive/c/io/read.h similarity index 100% rename from src/c/io/read.h rename to archive/c/io/read.h diff --git a/src/c/memory/conspage.c b/archive/c/memory/conspage.c similarity index 100% rename from src/c/memory/conspage.c rename to archive/c/memory/conspage.c diff --git a/src/c/memory/conspage.h b/archive/c/memory/conspage.h similarity index 100% rename from src/c/memory/conspage.h rename to archive/c/memory/conspage.h diff --git a/src/c/memory/consspaceobject.c b/archive/c/memory/consspaceobject.c similarity index 100% rename from src/c/memory/consspaceobject.c rename to archive/c/memory/consspaceobject.c diff --git a/src/c/memory/consspaceobject.h b/archive/c/memory/consspaceobject.h similarity index 100% rename from src/c/memory/consspaceobject.h rename to archive/c/memory/consspaceobject.h diff --git a/src/c/memory/cursor.c b/archive/c/memory/cursor.c similarity index 100% rename from src/c/memory/cursor.c rename to archive/c/memory/cursor.c diff --git a/src/c/memory/cursor.h b/archive/c/memory/cursor.h similarity index 100% rename from src/c/memory/cursor.h rename to archive/c/memory/cursor.h diff --git a/src/c/memory/dump.c b/archive/c/memory/dump.c similarity index 100% rename from src/c/memory/dump.c rename to archive/c/memory/dump.c diff --git a/src/c/memory/dump.h b/archive/c/memory/dump.h similarity index 100% rename from src/c/memory/dump.h rename to archive/c/memory/dump.h diff --git a/src/c/memory/hashmap.c b/archive/c/memory/hashmap.c similarity index 100% rename from src/c/memory/hashmap.c rename to archive/c/memory/hashmap.c diff --git a/src/c/memory/hashmap.h b/archive/c/memory/hashmap.h similarity index 100% rename from src/c/memory/hashmap.h rename to archive/c/memory/hashmap.h diff --git a/src/c/memory/lookup3.c b/archive/c/memory/lookup3.c similarity index 100% rename from src/c/memory/lookup3.c rename to archive/c/memory/lookup3.c diff --git a/src/c/memory/lookup3.h b/archive/c/memory/lookup3.h similarity index 100% rename from src/c/memory/lookup3.h rename to archive/c/memory/lookup3.h diff --git a/src/c/memory/stack.c b/archive/c/memory/stack.c similarity index 100% rename from src/c/memory/stack.c rename to archive/c/memory/stack.c diff --git a/src/c/memory/stack.h b/archive/c/memory/stack.h similarity index 100% rename from src/c/memory/stack.h rename to archive/c/memory/stack.h diff --git a/src/c/memory/vectorspace.c b/archive/c/memory/vectorspace.c similarity index 100% rename from src/c/memory/vectorspace.c rename to archive/c/memory/vectorspace.c diff --git a/src/c/memory/vectorspace.h b/archive/c/memory/vectorspace.h similarity index 100% rename from src/c/memory/vectorspace.h rename to archive/c/memory/vectorspace.h diff --git a/src/c/ops/equal.c b/archive/c/ops/equal.c similarity index 100% rename from src/c/ops/equal.c rename to archive/c/ops/equal.c diff --git a/src/c/ops/equal.h b/archive/c/ops/equal.h similarity index 100% rename from src/c/ops/equal.h rename to archive/c/ops/equal.h diff --git a/src/c/ops/intern.c b/archive/c/ops/intern.c similarity index 100% rename from src/c/ops/intern.c rename to archive/c/ops/intern.c diff --git a/src/c/ops/intern.h b/archive/c/ops/intern.h similarity index 100% rename from src/c/ops/intern.h rename to archive/c/ops/intern.h diff --git a/src/c/ops/lispops.c b/archive/c/ops/lispops.c similarity index 100% rename from src/c/ops/lispops.c rename to archive/c/ops/lispops.c diff --git a/src/c/ops/lispops.h b/archive/c/ops/lispops.h similarity index 100% rename from src/c/ops/lispops.h rename to archive/c/ops/lispops.h diff --git a/src/c/ops/loop.c b/archive/c/ops/loop.c similarity index 100% rename from src/c/ops/loop.c rename to archive/c/ops/loop.c diff --git a/src/c/ops/loop.h b/archive/c/ops/loop.h similarity index 100% rename from src/c/ops/loop.h rename to archive/c/ops/loop.h diff --git a/src/c/ops/meta.c b/archive/c/ops/meta.c similarity index 100% rename from src/c/ops/meta.c rename to archive/c/ops/meta.c diff --git a/src/c/ops/meta.h b/archive/c/ops/meta.h similarity index 100% rename from src/c/ops/meta.h rename to archive/c/ops/meta.h diff --git a/src/c/repl.c b/archive/c/repl.c similarity index 100% rename from src/c/repl.c rename to archive/c/repl.c diff --git a/src/c/repl.h b/archive/c/repl.h similarity index 100% rename from src/c/repl.h rename to archive/c/repl.h diff --git a/src/c/time/psse_time.c b/archive/c/time/psse_time.c similarity index 100% rename from src/c/time/psse_time.c rename to archive/c/time/psse_time.c diff --git a/src/c/time/psse_time.h b/archive/c/time/psse_time.h similarity index 100% rename from src/c/time/psse_time.h rename to archive/c/time/psse_time.h diff --git a/src/c/utils.c b/archive/c/utils.c similarity index 100% rename from src/c/utils.c rename to archive/c/utils.c diff --git a/src/c/utils.h b/archive/c/utils.h similarity index 100% rename from src/c/utils.h rename to archive/c/utils.h diff --git a/src/c/version.h b/archive/c/version.h similarity index 100% rename from src/c/version.h rename to archive/c/version.h diff --git a/unit-tests/add.sh b/archive/unit-tests/add.sh similarity index 100% rename from unit-tests/add.sh rename to archive/unit-tests/add.sh diff --git a/unit-tests/allocation-tests/allocation-tester.sh b/archive/unit-tests/allocation-tests/allocation-tester.sh similarity index 100% rename from unit-tests/allocation-tests/allocation-tester.sh rename to archive/unit-tests/allocation-tests/allocation-tester.sh diff --git a/unit-tests/allocation-tests/allocation-tests.csv b/archive/unit-tests/allocation-tests/allocation-tests.csv similarity index 100% rename from unit-tests/allocation-tests/allocation-tests.csv rename to archive/unit-tests/allocation-tests/allocation-tests.csv diff --git a/archive/unit-tests/allocation-tests/allocation-tests.ods b/archive/unit-tests/allocation-tests/allocation-tests.ods new file mode 100644 index 0000000000000000000000000000000000000000..32a99d6041b03db1cda8c56580a2b228911ee8a8 GIT binary patch literal 32991 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 C!=GFL literal 0 HcmV?d00001 diff --git a/archive/unit-tests/allocation-tests/feature-2.test.tmp b/archive/unit-tests/allocation-tests/feature-2.test.tmp new file mode 100644 index 0000000..5d198dd --- /dev/null +++ b/archive/unit-tests/allocation-tests/feature-2.test.tmp @@ -0,0 +1,30 @@ +Case, Summary, Allocated, Deallocated, Not deallocated, Delta Allocated, Delta Deallocated, Delta Not Deallocated +"Basecase", "Allocation summary allocated 19986 deallocated 245 not deallocated 19741", 19986, 245, 19741 +"", "Allocation summary allocated 19986 deallocated 245 not deallocated 19741", 19986, 245, 19741, 0, 0, 0 +"nil", "Allocation summary allocated 20019 deallocated 253 not deallocated 19766", 20019, 253, 19766, 33, 8, 25 +"()", "Allocation summary allocated 19990 deallocated 249 not deallocated 19741", 19990, 249, 19741, 4, 4, 0 +"(quote ())", "Allocation summary allocated 20025 deallocated 247 not deallocated 19778", 20025, 247, 19778, 39, 2, 37 +"(list)", "Allocation summary allocated 20023 deallocated 257 not deallocated 19766", 20023, 257, 19766, 37, 12, 25 +"(list )", "Allocation summary allocated 20023 deallocated 257 not deallocated 19766", 20023, 257, 19766, 37, 12, 25 +"(list 1)", "Allocation summary allocated 20033 deallocated 262 not deallocated 19771", 20033, 262, 19771, 47, 17, 30 +"(list 1 1)", "Allocation summary allocated 20043 deallocated 267 not deallocated 19776", 20043, 267, 19776, 57, 22, 35 +"(list 1 1 1)", "Allocation summary allocated 20053 deallocated 272 not deallocated 19781", 20053, 272, 19781, 67, 27, 40 +"(list 1 2 3)", "Allocation summary allocated 20053 deallocated 272 not deallocated 19781", 20053, 272, 19781, 67, 27, 40 +"(+)", "Allocation summary allocated 20022 deallocated 255 not deallocated 19767", 20022, 255, 19767, 36, 10, 26 +"(+ 1)", "Allocation summary allocated 20030 deallocated 260 not deallocated 19770", 20030, 260, 19770, 44, 15, 29 +"(+ 1 1)", "Allocation summary allocated 20039 deallocated 265 not deallocated 19774", 20039, 265, 19774, 53, 20, 33 +"(+ 1 1 1)", "Allocation summary allocated 20048 deallocated 270 not deallocated 19778", 20048, 270, 19778, 62, 25, 37 +"(+ 1 2 3)", "Allocation summary allocated 20048 deallocated 270 not deallocated 19778", 20048, 270, 19778, 62, 25, 37 +"(list 'a 'a 'a)", "Allocation summary allocated 20137 deallocated 278 not deallocated 19859", 20137, 278, 19859, 151, 33, 118 +"(list 'a 'b 'c)", "Allocation summary allocated 20137 deallocated 278 not deallocated 19859", 20137, 278, 19859, 151, 33, 118 +"(list :a :b :c)", "Allocation summary allocated 20107 deallocated 260 not deallocated 19847", 20107, 260, 19847, 121, 15, 106 +"(list :aa :bb :cc)", "Allocation summary allocated 20185 deallocated 260 not deallocated 19925", 20185, 260, 19925, 199, 15, 184 +"(list :aaa :bbb :ccc)", "Allocation summary allocated 20263 deallocated 260 not deallocated 20003", 20263, 260, 20003, 277, 15, 262 +"(list :alpha :bravo :charlie)", "Allocation summary allocated 20471 deallocated 260 not deallocated 20211", 20471, 260, 20211, 485, 15, 470 +"{}", "Allocation summary allocated 19992 deallocated 251 not deallocated 19741", 19992, 251, 19741, 6, 6, 0 +"{:z 0}", "Allocation summary allocated 20029 deallocated 257 not deallocated 19772", 20029, 257, 19772, 43, 12, 31 +"{:zero 0}", "Allocation summary allocated 20107 deallocated 257 not deallocated 19850", 20107, 257, 19850, 121, 12, 109 +"{:z 0 :o 1}", "Allocation summary allocated 20066 deallocated 261 not deallocated 19805", 20066, 261, 19805, 80, 16, 64 +"{:zero 0 :one 1}", "Allocation summary allocated 20196 deallocated 263 not deallocated 19933", 20196, 263, 19933, 210, 18, 192 +"{:z 0 :o 1 :t 2}", "Allocation summary allocated 20103 deallocated 265 not deallocated 19838", 20103, 265, 19838, 117, 20, 97 +"{:zero 0 :one 1 :two 2 :three 3 :four 4 :five five :six 6 :seven 7 :eight 8 :nine 9}", "Allocation summary allocated 21164 deallocated 306 not deallocated 20858", 21164, 306, 20858, 1178, 61, 1117 diff --git a/archive/unit-tests/allocation-tests/grep.bb b/archive/unit-tests/allocation-tests/grep.bb new file mode 100755 index 0000000..23b187a --- /dev/null +++ b/archive/unit-tests/allocation-tests/grep.bb @@ -0,0 +1,19 @@ +#!/home/simon/bin/bb + +(require '[clojure.java.io :as io]) +(import '[java.lang ProcessBuilder$Redirect]) + +(defn grep [input pattern] + (let [proc (-> (ProcessBuilder. ["grep" pattern]) + (.redirectOutput ProcessBuilder$Redirect/INHERIT) + (.redirectError ProcessBuilder$Redirect/INHERIT) + (.start)) + proc-input (.getOutputStream proc)] + (with-open [w (io/writer proc-input)] + (binding [*out* w] + (print input) + (flush))) + (.waitFor proc) + nil)) + +(grep "hello\nbye\n" "e") diff --git a/unit-tests/allocation-tests/test-forms b/archive/unit-tests/allocation-tests/test-forms similarity index 100% rename from unit-tests/allocation-tests/test-forms rename to archive/unit-tests/allocation-tests/test-forms diff --git a/unit-tests/append.sh b/archive/unit-tests/append.sh similarity index 100% rename from unit-tests/append.sh rename to archive/unit-tests/append.sh diff --git a/unit-tests/apply.sh b/archive/unit-tests/apply.sh similarity index 100% rename from unit-tests/apply.sh rename to archive/unit-tests/apply.sh diff --git a/archive/unit-tests/assoc.sh b/archive/unit-tests/assoc.sh new file mode 100644 index 0000000..339c023 --- /dev/null +++ b/archive/unit-tests/assoc.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +result=0 + +expected='1' +actual=`echo "(assoc 'foo '((foo . 1) (bar . 2) {ban 3 froboz 4 foo 5} (foobar . 6)))" | target/psse | tail -1` + + +echo -n "$0 $1: assoc list binding... " + +if [ "${expected}" = "${actual}" ] +then + echo "OK" +else + echo "Fail: expected '${expected}', got '${actual}'" + result=`echo "${result} + 1" | bc` +fi + +expected='4' +actual=`echo "(assoc 'froboz '((foo . 1) (bar . 2) {ban 3 froboz 4 foo 5} (foobar . 6)))" | target/psse | tail -1` + + +echo -n "$0 $1: hashmap binding... " + +if [ "${expected}" = "${actual}" ] +then + echo "OK" +else + echo "Fail: expected '${expected}', got '${actual}'" + result=`echo "${result} + 1" | bc` +fi + +expected='nil' +actual=`echo "(assoc 'ban '((foo . 1) (bar . 2) {ban nil froboz 4 foo 5} (foobar . 6) (ban . 7)))" | target/psse | tail -1` + + +echo -n "$0 $1: key bound to 'nil' (1)... " + +if [ "${expected}" = "${actual}" ] +then + echo "OK" +else + echo "Fail: expected '${expected}', got '${actual}'" + result=`echo "${result} + 1" | bc` +fi + +expected='nil' +actual=`echo "(assoc 'foo '((foo . nil) (bar . 2) {ban 3 froboz 4 foo 5} (foobar . 6)))" | target/psse | tail -1` + + +echo -n "$0 $1: key bound to nil (2)... " + +if [ "${expected}" = "${actual}" ] +then + echo "OK" +else + echo "Fail: expected '${expected}', got '${actual}'" + result=`echo "${result} + 1" | bc` +fi + diff --git a/unit-tests/bignum-add.sh b/archive/unit-tests/bignum-add.sh similarity index 100% rename from unit-tests/bignum-add.sh rename to archive/unit-tests/bignum-add.sh diff --git a/unit-tests/bignum-expt.sh b/archive/unit-tests/bignum-expt.sh similarity index 100% rename from unit-tests/bignum-expt.sh rename to archive/unit-tests/bignum-expt.sh diff --git a/unit-tests/bignum-print.sh b/archive/unit-tests/bignum-print.sh similarity index 100% rename from unit-tests/bignum-print.sh rename to archive/unit-tests/bignum-print.sh diff --git a/unit-tests/bignum-subtract.sh b/archive/unit-tests/bignum-subtract.sh similarity index 100% rename from unit-tests/bignum-subtract.sh rename to archive/unit-tests/bignum-subtract.sh diff --git a/unit-tests/bignum.sh b/archive/unit-tests/bignum.sh similarity index 100% rename from unit-tests/bignum.sh rename to archive/unit-tests/bignum.sh diff --git a/unit-tests/complex-list.sh b/archive/unit-tests/complex-list.sh similarity index 100% rename from unit-tests/complex-list.sh rename to archive/unit-tests/complex-list.sh diff --git a/unit-tests/cond.sh b/archive/unit-tests/cond.sh similarity index 100% rename from unit-tests/cond.sh rename to archive/unit-tests/cond.sh diff --git a/unit-tests/empty-list.sh b/archive/unit-tests/empty-list.sh similarity index 100% rename from unit-tests/empty-list.sh rename to archive/unit-tests/empty-list.sh diff --git a/unit-tests/empty-string.sh b/archive/unit-tests/empty-string.sh similarity index 100% rename from unit-tests/empty-string.sh rename to archive/unit-tests/empty-string.sh diff --git a/unit-tests/equal.sh b/archive/unit-tests/equal.sh similarity index 100% rename from unit-tests/equal.sh rename to archive/unit-tests/equal.sh diff --git a/unit-tests/eval-integer.sh b/archive/unit-tests/eval-integer.sh similarity index 100% rename from unit-tests/eval-integer.sh rename to archive/unit-tests/eval-integer.sh diff --git a/unit-tests/eval-quote-sexpr.sh b/archive/unit-tests/eval-quote-sexpr.sh similarity index 100% rename from unit-tests/eval-quote-sexpr.sh rename to archive/unit-tests/eval-quote-sexpr.sh diff --git a/unit-tests/eval-quote-symbol.sh b/archive/unit-tests/eval-quote-symbol.sh similarity index 100% rename from unit-tests/eval-quote-symbol.sh rename to archive/unit-tests/eval-quote-symbol.sh diff --git a/unit-tests/eval-real.sh b/archive/unit-tests/eval-real.sh similarity index 100% rename from unit-tests/eval-real.sh rename to archive/unit-tests/eval-real.sh diff --git a/unit-tests/eval-string.sh b/archive/unit-tests/eval-string.sh similarity index 100% rename from unit-tests/eval-string.sh rename to archive/unit-tests/eval-string.sh diff --git a/unit-tests/fred.sh b/archive/unit-tests/fred.sh similarity index 100% rename from unit-tests/fred.sh rename to archive/unit-tests/fred.sh diff --git a/unit-tests/integer-allocation.sh b/archive/unit-tests/integer-allocation.sh similarity index 100% rename from unit-tests/integer-allocation.sh rename to archive/unit-tests/integer-allocation.sh diff --git a/unit-tests/integer.sh b/archive/unit-tests/integer.sh similarity index 100% rename from unit-tests/integer.sh rename to archive/unit-tests/integer.sh diff --git a/unit-tests/interpreter.sh b/archive/unit-tests/interpreter.sh similarity index 100% rename from unit-tests/interpreter.sh rename to archive/unit-tests/interpreter.sh diff --git a/unit-tests/lambda.sh b/archive/unit-tests/lambda.sh similarity index 100% rename from unit-tests/lambda.sh rename to archive/unit-tests/lambda.sh diff --git a/unit-tests/let.sh b/archive/unit-tests/let.sh similarity index 100% rename from unit-tests/let.sh rename to archive/unit-tests/let.sh diff --git a/unit-tests/list-test.sh b/archive/unit-tests/list-test.sh similarity index 100% rename from unit-tests/list-test.sh rename to archive/unit-tests/list-test.sh diff --git a/unit-tests/many-args.sh b/archive/unit-tests/many-args.sh similarity index 100% rename from unit-tests/many-args.sh rename to archive/unit-tests/many-args.sh diff --git a/unit-tests/map.sh b/archive/unit-tests/map.sh similarity index 100% rename from unit-tests/map.sh rename to archive/unit-tests/map.sh diff --git a/archive/unit-tests/mapcar.sh b/archive/unit-tests/mapcar.sh new file mode 100644 index 0000000..70b41b0 --- /dev/null +++ b/archive/unit-tests/mapcar.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +result=0 + +##################################################################### +# Create an empty map using map notation +expected='(2 3 4)' +actual=`echo "(mapcar (lambda (n) (+ n 1)) '(1 2 3))" | target/psse | tail -1` + +echo -n "$0: Mapping interpreted function across list: " +if [ "${expected}" = "${actual}" ] +then + echo "OK" +else + echo "Fail: expected '${expected}', got '${actual}'" + result=1 +fi + +##################################################################### +# Create an empty map using make-map +expected='("INTR" "REAL" "RTIO" "KEYW")' +actual=`echo "(mapcar type '(1 1.0 1/2 :one))" | target/psse | tail -1` + +echo -n "$0: Mapping primitive function across list: " +if [ "${expected}" = "${actual}" ] +then + echo "OK" +else + echo "Fail: expected '${expected}', got '${actual}'" + result=1 +fi diff --git a/unit-tests/memberp.sh b/archive/unit-tests/memberp.sh similarity index 100% rename from unit-tests/memberp.sh rename to archive/unit-tests/memberp.sh diff --git a/unit-tests/memory.sh b/archive/unit-tests/memory.sh similarity index 100% rename from unit-tests/memory.sh rename to archive/unit-tests/memory.sh diff --git a/unit-tests/multiply.sh b/archive/unit-tests/multiply.sh similarity index 100% rename from unit-tests/multiply.sh rename to archive/unit-tests/multiply.sh diff --git a/unit-tests/nil.sh b/archive/unit-tests/nil.sh similarity index 100% rename from unit-tests/nil.sh rename to archive/unit-tests/nil.sh diff --git a/unit-tests/nlambda.sh b/archive/unit-tests/nlambda.sh similarity index 100% rename from unit-tests/nlambda.sh rename to archive/unit-tests/nlambda.sh diff --git a/unit-tests/path-notation.sh b/archive/unit-tests/path-notation.sh similarity index 100% rename from unit-tests/path-notation.sh rename to archive/unit-tests/path-notation.sh diff --git a/unit-tests/progn.sh b/archive/unit-tests/progn.sh similarity index 100% rename from unit-tests/progn.sh rename to archive/unit-tests/progn.sh diff --git a/unit-tests/quote.sh b/archive/unit-tests/quote.sh similarity index 100% rename from unit-tests/quote.sh rename to archive/unit-tests/quote.sh diff --git a/unit-tests/quoted-list.sh b/archive/unit-tests/quoted-list.sh similarity index 100% rename from unit-tests/quoted-list.sh rename to archive/unit-tests/quoted-list.sh diff --git a/unit-tests/ratio-addition.sh b/archive/unit-tests/ratio-addition.sh similarity index 100% rename from unit-tests/ratio-addition.sh rename to archive/unit-tests/ratio-addition.sh diff --git a/unit-tests/recursion.sh b/archive/unit-tests/recursion.sh similarity index 100% rename from unit-tests/recursion.sh rename to archive/unit-tests/recursion.sh diff --git a/unit-tests/reverse.sh b/archive/unit-tests/reverse.sh similarity index 100% rename from unit-tests/reverse.sh rename to archive/unit-tests/reverse.sh diff --git a/unit-tests/simple-list.sh b/archive/unit-tests/simple-list.sh similarity index 100% rename from unit-tests/simple-list.sh rename to archive/unit-tests/simple-list.sh diff --git a/unit-tests/slurp.sh b/archive/unit-tests/slurp.sh similarity index 100% rename from unit-tests/slurp.sh rename to archive/unit-tests/slurp.sh diff --git a/unit-tests/string-allocation.sh b/archive/unit-tests/string-allocation.sh similarity index 100% rename from unit-tests/string-allocation.sh rename to archive/unit-tests/string-allocation.sh diff --git a/unit-tests/string-cons.sh b/archive/unit-tests/string-cons.sh similarity index 100% rename from unit-tests/string-cons.sh rename to archive/unit-tests/string-cons.sh diff --git a/unit-tests/string-with-spaces.sh b/archive/unit-tests/string-with-spaces.sh similarity index 100% rename from unit-tests/string-with-spaces.sh rename to archive/unit-tests/string-with-spaces.sh diff --git a/unit-tests/subtract.sh b/archive/unit-tests/subtract.sh similarity index 100% rename from unit-tests/subtract.sh rename to archive/unit-tests/subtract.sh diff --git a/unit-tests/try.sh b/archive/unit-tests/try.sh similarity index 100% rename from unit-tests/try.sh rename to archive/unit-tests/try.sh diff --git a/unit-tests/varargs.sh b/archive/unit-tests/varargs.sh similarity index 100% rename from unit-tests/varargs.sh rename to archive/unit-tests/varargs.sh diff --git a/unit-tests/wide-character.sh b/archive/unit-tests/wide-character.sh similarity index 100% rename from unit-tests/wide-character.sh rename to archive/unit-tests/wide-character.sh diff --git a/docs/Paged-space-objects.md b/docs/Paged-space-objects.md index 6885b70..8ecbd11 100644 --- a/docs/Paged-space-objects.md +++ b/docs/Paged-space-objects.md @@ -3,7 +3,7 @@ *Antecedents for this essay: 1. [Reference counting, and the garbage collection of equal sized objects](https://www.journeyman.cc/blog/posts-output/2013-08-25-reference-counting-and-the-garbage-collection-of-equal-sized-objects/); -2. [Vector space, Pages, Mark-but-don't-sweep, and the world's slowest ever rapid prototype](https://www.journeyman.cc/blog/posts-output/2026-03-13-The-worlds-slowest-ever-rapid-prototype/). +2. [Vector space, Pages, Mark-but-don't-sweep, and the world's slowest ever rapid prototype](https://www.journeyman.cc/blog/posts-output/2026-03-13-The-worlds-slowest-ever-rapid-prototype/).* The post-scarcity software environment needs to store data in objects. Much of the data will be in objects which will fit in the memory footpring ot a cons cell, but some won't, and those that won't will be in a variety of sizes. diff --git a/docs/State-of-play.md b/docs/State-of-play.md index 55d9bab..ffa4e79 100644 --- a/docs/State-of-play.md +++ b/docs/State-of-play.md @@ -1,5 +1,29 @@ # State of Play +## 20260323 + +I started an investigastion of the [Zig language](https://ziglang.org/) and +come away frustrated. It's definitely an interesting language, and *I think* +one capable of doing what I want. But in trying to learn, I checked out +someone else's [Lisp interpreter in Zig](https://github.com/cryptocode/bio). +The last commit to this project is six months ago, so fairly current; project +documentation is polished, implying the project is well advanced and by someone +competent. + +It won't build. + +It won't build because there are breaking changes to the build system in the +current version of Zig, and, according to helpful people on the Zig language +Discord, breaking changes in Zig versions are quite frequent. + +Post-scarcity is a project which procedes slowly, and is very large indeed. I +will certainly not complete it before I die. + +I don't feel unstable tools are a good choice. + +I have, however, done more thinking about [Paged space objects], and think I +now have a buildable specification. + ## 20260319 Right, the `member?` bug [is fixed](https://git.journeyman.cc/simon/post-scarcity/issues/11).