TODO: nil, #f, #t are integers TODO: call/cc broken with or with SCHEME_STACK, also in tinyscheme TODO: fix .atom names TODO: |name|? (TOK_STRATOM) TODO: simpler cell memory management, only one block TODO: proplists broken due to symbol not a pair anymore TODO: UNNAMED_OPs have little reason to be in the opcode table? TODO: (list->vector (string->list (string-copy "abc"))) fails miserably when repeated TODO: (vector-append #(1 2)) same - major size optimisations - struct layout for both typical CISC and RISC cpus. - optional error messages. - optional error checking. - cell size reduced by not storing both float and int forms of a number, - major dependency optimisations (no stdio etc.) - faster and vastly simpler vector memory management (execution speed is roughly twice faster than tinyscheme when optimised for size, and 2.5 times faster when optimised for speed). - no need for consecutive cells - more compact and faster vectors. - resizable vectors (TODO: not exposed yet). - faster environment implementation, not hashed by name but by symbol address. - simpler and faster memory management (no need for sorted free lists). - much faster call stack implementation, fully supporting continuations, while greatly reducing cell thrashing, thus fewer gc's and overall much faster execution. - move caaaar etc. to C, which should effectively save some memory (and should also be faster). - allow full 32 bit size range for strings and vectors, where possible. - made ports optional. - made error checking and error strings optional. - implemented small-integer cache, reducing number of cells allocated. - ripped out features: dynamic loading, nonstandard C targets. - fix numerous ISO C violations (mostly _ namespace). - fix numerous uninitialised value violations. - fix some bufer overflows (mostly relying on _snprintf terminating with 0). - fix numerous sign/truncation problems. - remove limit of 65535 args maximum. - move ~6kb opcode table into read-only segemnt, saves 6kb rss. - reduce ~6kb opcode table to 1.2kb. - symbols use one cell instead of two now. - subnormals are no longer flushed to zero in some comparisons. - new procedure: gensym? - scheme fix: gensym does not intern the symbol. - scheme fix: properly support symbol names starting with '.' - scheme improvement: support |identifier| syntax. - numerous R7RS improvements: - many added procedures. - aligned existing procedures. - multiline string (\whitespace) parsing. - removed unused 1kb linebuf from scheme context. - abstract cell pointer types, to quickly experiment with different representations. - use c99 rounding functions.