Change Log

2009-09-06
	Removed EXPAND-QUASIQUOTE. It is no longer needed, because
	EXPAND-MACRO can now be used to expand quasiquoted forms.
	Documented the interpreter start-up process in the man page.
	Renamed WRONG to ERROR to make it more compatible with
	SRFI-23 error reporting.
2009-09-05
	Rewrote QUASIQUOTE as a macro and removed all quasiquotation
	functionality from the C part.
2009-09-03
	Included "./lib" and "./contrib" in DEFAULT_LIBRARY_PATH, so
	S9 can load libraries after just compiling it in its build
	directory.
	Added the S9:S9 start-up hook. When a nullary procedure named
	S9:S9 exists, it will be called when S9 starts.
	Added the DUMP-IMAGE primitive, which allows to write a new
	heap image from the REPL.
	Updated the help pages.
2009-09-02
	Made SQRT return an exact value whenever possible.
2009-08-14
	Fix: '() printed two ()'s (was introduced with #<NaN>).
	Added the UNSORT procedure to LIB.
2009-08-11
	Fixes:
	- Cleaned up the SC extension;
	- Added missing S9SC(1) man page.
	Thanks again, Masaru KIMURA.
2009-08-08
	Added constants for options, so you can write
	(plot* -7 7 sin type: scatter style: 3)
	instead of
	(plot* -7 7 sin 'type: 'scatter 'style: 3).
2009-08-07
	Added 'X-GRID: and 'Y-GRID: options to S9SC SETUP procedure.
	Added abbreviations, e.g.: 'STEP: for 'X-STEP: and 'Y-STEP:, etc.
	Fix: second argument of EXPT could not be real.
2009-08-06
	Added option argument checking to S9SC procedures.
	Fix: made PRINT-CODE generate proper links for LOAD-FROM-LIBRARY
	arguments without ".scm" suffix.
2009-08-05
	Wrote the S9SC(1) man page.
2009-08-04
 	Re-organized the extension libraries.
	Renamed the GFX extension to SC.
	Added initialization procedures to extensions.
	Made (LOG N) return #<NaN> for non-positive N.
2009-07-26
	Fixed some warnings in GFX extension. Thanks, Barak Pearlmutter.
2009-07-25
	Added statistics package to CONTRIB.
	Added the Scheme 9 Scientific Calculator extension (S9SC).
	Note that S9SC is *very* experimental at this stage.
2009-07-08
	Fixed that rounding bug in ATAN.
2009-07-05
	Test suite failed on 64-bit machines due strange rounding
	errors in ATAN. Decreased accuracy to 4 digits as a lame
	work-around. Suggestions welcome.
2009-07-04
	Added support for unspecific digits (#) to STRING->NUMBER.
	Fix: (ASIN 1) and (ACOS 0) were undefined.
	Fixed some minor flaws.
	Added tests for ACOS, ASIN, ATAN, and STRING->NUMBER.
2009-07-01
	Added the ACOS, ASIN, ATAN procedures.
	Fix: real number normalization *first* removed trailing
	zeros and *then* truncated the mantissa. Oops.
2009-06-29
	Added '#' syntax for unspecific digits in inexact numbers.
2009-06-26
	Fix: STRING->NUMBER always returned an inexact result for
	real number representations.
2009-06-25
	Fix: Stack was not cleaned up properly in some error conditions.
	Fix: (*) and (+) could crash the interpreter.
	Internal: Added 64-bit emulation for 32-bit systems.
2009-06-15
	Minor cleanup, added comments where necessary.
	* Do not expect any updates in the near future.
	* I need a break from programming.
	* Bug reports are still welcome, but will get low
	* priority for now.
2009-06-09
	Fixed a variable collision in the hash table implementation.
	(lib/hash-table.scm)
2009-06-08
	Made PRINT-CODE recognize new numeric functions as primitives.
	Fixed INVERSEO procedure in AMK.
2009-06-07
	Made STRING->NUMBER recognize real numbers.
	Fix: missing initialization of got_d in string_numeric().
	Fix: FLOOR and EXACT->INEXACT did not normalize their results.
	Simplified counter_to_string(), based on code by Masaru KIMURA.
	Added loads of tests for STRING->NUMBER.
2009-06-06
	Extended domain of NUMBER->STRING to REAL.
	Added support for the "precision markers" D,F,L,S, although
	only one floating point precision exists.
	Fix: MANTISSA did not return negative signs.
	Fix: INEXACT->EXACT lost the sign of its operand.
	Fix: #I created a double sign in negative integers.
	Added/updated help pages for various procedures.
	Added more tests.
2009-06-05
	Fix: SIN, COS, TAN expected degrees, should be radians. Oops.
	Ran further 64-bit tests on the Alpha, all passed.
2009-06-04
	Implemented LOG and EXP procedures. Added tests.
	Fixed size of Called_procedures[]. Good catch, Masaru KIMURA.
2009-06-03
	Implemented CEILING, FLOOR, ROUND, TRUNCATE procedures.
	Implemented SIN, COS, and TAN procedures.
	Added tests for all of the above.
	Made procedures expecting integers accept real numbers too, as
	long as they are exact and can be converted to integer without
	loss of precision. Added tests.
	Made the reader accept an excess number of digits in the mantissa,
	giving an inexact number.
2009-06-02
	* I have tested this release on my Alpha with -DBITS_PER_WORD_64
	* and it passed all tests. If make test still fails on Linux/PPC,
	* I would need SSH access to a PPC box to investigate further.
	Implemented SQRT.
	Fixed INTEGER? (mistook random objects for integers).
	Removed some 64-bit glitches.
	Applied some cosmetics.
	Added test cases.
2009-06-01
	Implemented real number division (/).
	Made INTEGER? return #T for reals that can be converted to
	integer without loss of precision.
	Made INEXACT->EXACT return an integer whenever possible.
	Extended domain of EXPT to real.
	Implemented the internal EXPONENT and MANTISSA procedures.
	Fixed a GC leak in real_normalize(). Thanks, Masaru KIMURA.
	Added test cases for / and EXPT.
	Added more type test cases.
	Updated the S9(1) man page.
2009-05-31
	Implemented real number multiplication (*).
	Just try: (expt 9.9 999999999). Is this cool?
	Intercepted numeric underflow and overflow.
	Added test cases for real *.
	Added #E and #I syntax.
	Added real number test cases for #E, #I, EXACT->INEXACT,
	INEXACT->EXACT, NEGATIVE?, POSITIVE?, ZERO?.
2009-05-30
	Fixed INEXACT->EXACT (sign error).
	Implemented real -.
	Implemented exactness in
	- the +, MIN, and MAX procedures;
	- bignum-->real conversion;
	- real number normalization.
	Added real number tests for -, ABS, MIN, MAX.
	Added test cases for EXACT->INEXACT and INEXACT->EXACT.
2009-05-29
	Implementated real +.
	Implemented EXACT? and INEXACT?.
	Implemented EXACT->INEXACT and INEXACT->EXACT.
	Fixed a few bugs in real <.
	Added real number tests for +.
2009-05-28
	Added more test cases for real <.
	Extended domains of <=, >, >= to real.
	Added real number tests for <=, >, and >=.
	* Please stress-test the real number routines
	* and do report errors!
	* Suggestions for additional tests are welcome!
2009-05-27
	Added mantissa size to magic ID of image files.
	Implemented comparison of real numbers in <.
	Added real number tests for <.
2009-05-26
	Moved sign of reals to flags field in order to allow for -0.0.
	Changed flat_copy() so that it can copy special atoms, too.
	Added real number tests for =.
	Cleanup.
2009-05-25
	Added a reader and printer for real numbers.
	Implemented internal representation for real numbers.
	Implemented comparison of real numbers in =.
	Added more syntax tests to test suite (primarily in order to test
	the real number reader and printer).
	Added REAL? predicate.
	Made NUMBER? an alias of REAL?.
	Applied some minor cosmetics.
	* Note that you cannot yet do anything really useful with
	* real numbers other than translating them from/to external
	* representation and comparing them.
2009-05-24
	Added code to detect real number syntax and dispatch it to
	a specialized reader. Yes, this is a first step toward real
	number arithmetics, but don't hold your breath right now.
2009-05-23
	Improved the documentation of the matcher package.
	Removed unused list_of_symbols() function from "s9.c".
	Thanks, Masaru KIMURA (also for misc. other cosmetics).
2009-05-22
	Moved "define-match.scm" to "matcher.scm".
	Renamed DEFINE-MATCH to DEFINE-MATCHER, added LET-MATCHER syntax
	to matcher package. Extended matchers so that 'SYMBOL matches a
	literal symbol. (lib/matcher.scm)
	Improved rendering of (cond (p => x)) in pretty printer.
	(contrib/pretty-print.scm)
	Applied various cosmetics.
2009-05-21
	Added STRING-UPCASE and STRING-DOWNCASE procedures.
	(lib/string-case.scm)
2009-05-20
	Simplified HASH-TABLE procedures. (lib/hash-table.scm)
2009-05-17
	Included help pages for ALL procedures of the extension
	library! Just try (load-from-library "draw-tree") and
	then (help 'draw-tree).
	LOAD-FROM-LIBRARY now attaches a ".scm" suffix, if the
	given file cannot be located, i.e., you can write
	(load-from-library "foo") instead of (... "foo.scm").
	Tweaked the image dump/load routines.
	Fixed a (self-made) bug in FORMAT (~A would slashify output).
2009-05-16
	Fix: made strings returned by SYMBOL->STRING immutable.
	Updated the help pages.
	Prepared comments in library files for automatic generation
	of help pages. (Stay tuned.)
2009-05-14
	Added code to grow the memory pools when loading large images.
	Added interpreter tag to magic header (images are not portable).
	Added another tweak for POSIX compatibility.
2009-05-13
	Administrative:
	- Removed all those special variables ($@, $<, ...)
	  from Makefile, because some(?) of them are simply
	  not portable.
	- Added -Dunix to compilation of unix.c (sic!).
2009-05-12
	Applied some cosmetics to s9.scm.
	Administrative: fixed local environment in the build process.
2009-05-11
	Fix: PRINT-CODE handled QUOTE inside of QUASIQUOTE incorrectly.
	(contrib/print-code.scm)
	Fixed a bug that resulted in multiple evaluation of DELAYed
	expressions.
2009-05-10
	Minor fix: protected car(x) in syntax_object_p().
	Cosmetics.
	Changed allocation strategy. We will now use half of the
	memory pool at most. OK, this gives us the same space
	efficiency as a copying collector, but with the advantage
	of having cons objects in fixed places on the heap. The
	performance gain is about 35% (zebra puzzle).
2009-05-09
	Minor fix: protected argument in pp_load().
	Made conceptual difference between string and symbol names
	[string() vs. symbol_name(), string_len() vs. symbol_len()].
	Removed clone_string() due to above separation.
	Using O(1) string_len() instead of O(n) strlen() in pp_gensym().
	Checking length first in STRING=? and STRING-CI=?.
2009-05-07
	Fix: PRINT-CODE generated tag soup when two subsequent
	tokens were to be printed in boldface.
	Added another tweak for Unix portability to s9.h.
2009-05-06
	Administrative change:
	- #ifdef __unix and #ifdef unix are obviously insufficient
	  to check for a Unix system; added -Dunix to Makefile.
	Thanks, Barak Pearlmutter!
2009-05-05
	Administrative changes:
	- Applied some fixes to the build process.
	- Created browsable version of the library code.
	- Added version tag (timestamp) to distribution file.
	- Added deinstall target to Makefile.
2009-05-04
	Replaced '| by ': in ML-style syntax of DEFINE-MATCH,
	because '| is not portable.
	Removed MAP-CAR from documentation, because it is only
	used internally.
	Simplified definition of LETREC (cosmetics).
	Made the code printer generate links to files included
	via LOAD-FROM-LIBRARY. (contrib/print-code.scm)
2009-05-03
	Added a pattern matcher with optional support for ML syntax
	to the library. (lib/define-match.scm)
	Updated the test suite.
	Moved the online help system to contrib. (contrib/help.scm)
	Moved DRAW-TREE to contrib. (contrib/draw-tree.scm)
	Included the pretty-printer and the online help system in
	the default heap image.
2009-05-01
	Fixed some 64-bit flaws.
	Many thanks to Torsten Leibold for giving his
	AlphaStation 200 4/233 to me!
2009-04-29
	Fix: alpha-conversion of recursive SYNTAX-RULES was broken,
	leading to potentially non-hygienic expansion.
	Added SYNTAX-RULES version of FLUID-LET. (lib/fluid-let-sr.scm)
	Fix: line numbers were off after LOAD.
	Moved interactive programs to CONTRIB, even if they have been
	contributed by myself. (pretty-print.scm, print-code.scm)
2009-04-28
	Finished the new and vastly improved pretty-printer.
	(lib/pretty-print.scm)
2009-04-27
	Fixed some bugs in PROGRAM? (DO with multi-expr test part was
	not allowed; commands were not optional).
	Started rewriting the pretty-printer.
2009-04-26
	Reporting file name in messages when using "-f program" option.
	Made the pretty-printer print '`, and ,@ instead of QUOTE,
	QUASIQUOTE, UNQUOTE, and UNQUOTE-SPLICING.
	Still more clean-up.
2009-04-25
	Even more code clean-up.
2009-04-23
	Applied more cosmetics.
2009-04-22
	Improved hashing of lists. (lib/hash-table.scm)
	Added memoization to PROLOG interpreter. (contrib/prolog.scm)
2009-04-21
	Applied various micro optimizations and cosmetics.
	Added == (unify) and DIF goals to PROLOG example.
2009-04-20
	Made the interpreter print file and line number information
	in error messages when LOADing a file.
	Reverted to previous version of the PROLOG interpreter due
	to unclear semantics.
2009-04-19
	Extended the PROLOG interpreter. (contrib/prolog.scm)
2009-04-18
	Added PROLOG interpreter to contrib section. (contrib/prolog*)
2009-04-15
	Fixed some error messages; made messages more uniform.
	Fixed a bug in the reader: the (malformed) expression ('))
	gave a strange result. It is an error now.
2009-04-12
	Documented the VOID procedure.
2009-04-10
	Added numeric base prefixes #B, #D, #O, and #X.
2009-04-09
	Fix: STRING-FILL! and VECTOR-FILL! should not be able to mutate
	string and vector literals, either.
2009-04-08
	Added the STATS primitive, which evaluates an expression and
	then prints some interesting data gathered during evaluation.
	Added the VOID procedure, which evaluates to an unspecific value.
2009-04-03
       Fix: a #F literal following an ellipsis in DEFINE-SYNTAX/SYNTAX-RULES
       would be substituted by mistake.
2009-03-30
       A Debian package was created by Barak Pearlmutter. Thanks for the
       package and a few minor but useful patches!
2009-03-22
       Made pair, string, and vector literals immutable, so expressions
       like these no longer work:
         (set-car! '(a b) 'c)
         (set-cdr! '(a b) 'c)
         (string-set! "foo" 0 #\g)
         (vector-set! '#(a b) 0 'c)
2009-03-15
       Added code to make S9fES compile with PCC. Wow, PCC is so much
       faster, still generates good code, and comes with a liberal
       license. Bye, bye, GCC.
2009-03-14
       Added FreeBSD port.
       Updated s9(1) man page.
2009-03-13
       Fix: made quasiquotation of improper lists work.
       Fix: rewrote the high-level syntax matcher and expander.
       DEFINE-SYNTAX and SYNTAX-RULES should work as expected now,
       including multiple ellipses, etc.
       Made the interpreter report nested QUASIQUOTE (which is
       currently unsupported).
       Added UNIX:UNLINK primitive to extended interpreter.
       (ext/unix.c)
2009-03-12
       Made unix extension procedures return #F in case of an error
       instead of just aborting evaluation.
       Added UNIX:ERRNO primitive to extended interpreter. (ext/unix.c)
       Updated README, fixed s9e(1) man page, updated the binary for
       the unmentionable horror.
2009-03-11
       Added UNIX:READDIR and UNUX:READLINK primitives to extended
       interpreter. (ext/unix.c)
       Added UNIX:GETPWENT primitive to extended interpreter.
       (ext/unix.c)
2009-03-10
       Added FORMAT-TIME procedure to the system extension.
       (ext/system.scm)
       Updated s9e(1) man page.
2009-03-09
       Added UNIX-TIME->TIME and TIME->UNIX-TIME procedures to the
       system extension. (ext/system.scm)
2009-03-08
       Fix: removed recursion from GC of vectors. The garbage collector
       runs completely in constant space now. Yay!
2009-03-03
       Made CHOWN accept user names and default values.
       (ext/system.scm)
2009-03-02
       Added UNIX:GETGRNAM and UNIX:GETGRGID primitives to Unix
       extensions. (ext/unix.c)
       Added bitwise logic operations to library: BITWISE-CLEAR,
       BITWISE-AND, BITWISE-AND-C2, BITWISE-1, BITWISE-AND-C1,
       BITWISE-2, BITWISE-XOR, BITWISE-OR, BITWISE-OR-NOT,
       BITWISE-XOR-NOT, BITWISE-C2, BITWISE-OR-C2, BITWISE-C1,
       BITWISE-OR-C1, BITWISE-AND-NOT, BITWISE-SET, BITWISE-SHIFT-LEFT,
       BITWISE-SHIFT-RIGHT. (lib/bitwise-ops.scm)
       Made CHMOD accept symbolic and octal modes. (ext/system.scm)
       Made argument of EXIT optional. (ext/system.scm)
2009-03-01
       Made the interpreter abort earlier in case of an error.
       Added hash table procedures to library. (lib/hash-table.scm)
2009-02-28
       Added support for radixes from 2 to 36 to NUMBER->STRING and
       STRING->NUMBER. Not R4RS, but nice and trivial to implement.
       Added READ-FILE procedure to library. (lib/read-file.scm)
       Added STRING-FIND (fast string search) procedure to contrib.
       (contrib/string-find.scm)
2009-02-27
       The code printer now supports vectors. (lib/print-code.scm)
       New: added contrib directory containing code by other authors.
       Added Common Lisp-style FORMAT to contrib section. Thanks, Dirk
       Lutzebck. (contrib/format.*)
2009-02-26
       Fix: the interpreter now accepts newline characters in string
       literals.
       Fixed quotation of strings in the WRITE-TO-STRING library
       procedures.
       Added DISPLAY-TO-STRING (lib/write-to-string.scm).
2009-02-25
       Fix: test part of DO should accept multiple expressions.
       Added TRACE primitive. See man page for details.
       Fixed a bug in the PROGRAM? library function (LAMBDA should
       accept multiple expressions).
2009-02-22
       Updated the help pages (included descriptions of dynamic
       top-level variables).
       Added the FLUID-LET syntax to the library (lib/fluid-let.scm).
2009-02-09
       Updated man page and help entry for DEFINE-MACRO.
2009-02-04
       Added support for named LET to the pretty-printer
       (lib/pretty-print.scm).
2009-02-03
       Added the PROGRAM? predicate to the library (lib/programp.scm).
       Added automatic code/data detection to the pretty-printer
       (lib/pretty-print.scm).
2009-02-02
       Added formatting of DO to the pretty-printer
       (lib/pretty-print.scm).
2009-02-01
       Cleaned up installation process.
       Fixed vector output and quotation in the pretty-printer
       (lib/pretty-print.scm).
2009-01-30
       Fixed indentation of lambda function applications in the
       pretty-printer (lib/pretty-print.scm).
2009-01-29
       Allowed multiple occurrences of the -f program switch on the
       command line.
       Fixed packaging error: library files (lib/) were missing.
2009-01-28
       Updated documentation.
2009-01-27
       Applied some cosmetical changes (mostly s9.scm).
       Added some test cases for multiple expressions in bodies.
2009-01-26
       Improved syntax checking of LET*.
       Fix: the else clause of CASE evaluated only the first expression
       of its body.
       Fix: DO now binds variables in each iteration rather than
       mutating them.
2009-01-25
       Added the APROPOS procedure to the help system
       [(load-from-library "help.scm")].
       Added a help page for DEFINE-MACRO.
2009-01-24
       New: Finished the online help system that is based on the R4RS
       document. Try (load-from-library "help.scm") and then (help).
       Use (set! *lines-per-page* ...) to adjust the system to your
       preferred screen size.
       Improved DEFINE-SYNTAX and SYNTAX-RULES (added support for
       multiple ellipses per pattern). DEFINE-SYNTAX is still quirky,
       though.
2009-01-21
       Added the -i (ignore rc file) command line option.
2009-01-20
       Fix: SYMBOLS was broken by macro expansion.
2009-01-19
       Added STRING-CONTAINS to the library.
       Factored out the LOCATE-FILE procedure, which locates a file in
       $S9FES_LIBRARY_PATH (s9.scm).
       Fixed the implementation of DELAY (it now passes all tests of
       Aubrey Jaffer's R4RS test suite).
2009-01-18
       Added pretty-printer to the library (lib/pretty-print.scm).
       Added code printer to the library (lib/print-code.scm). The
       PRINT-CODE procedure renders Scheme code in HTML with syntax
       highlighting and optional CSS2-based paren matching.
2009-01-17
       Added the DRAW-TREE procedure to the library.
       Fix: bodies of local DEFINEs may have more than one expression
       now.
       Fix: interpreter no longer breaks when attempting to expand
       incomplete quotation and quasiquotation.
2009-01-16
       Updated manual pages.
       Removed FOLD-LEFT and FOLD-RIGHT from the library, because the
       S9fES core already contains them.
       Made FOLD-LEFT, FOLD-RIGHT, and map accept lists of different
       lengths.
2009-01-15
       Added ML-style record data type to library (records.scm).
       Added the SYMBOLS primitive which returns a list of defined
       symbols.
2009-01-14
       Added Another Micro Kanren (amk.scm) and the zebra example
       (zebra.scm) to the library.
       Added automatic library testing (libtest.sh).
2009-01-13
       Imported the regular expression matcher of zenlisp
       (lib/regex.scm).
       Added the STRING-SPLIT, READ-FROM-STRING, AND WRITE-TO-STRING
       procedures to the library.
       Fixed DEFINE-SYNTAX: templates now may contain syntactically
       incorrect binding constructs. Yes, this is important; see
       lib/module.scm for an example.
       Added simple module syntax to the library (module.scm).
2009-01-12
       Removed the SQRT procedure, because it always returned an
       integer. This procedure will be included in a future version as
       INTEGER-SQRT.
       Added the following procedures to the library of loadable
       functions: COMBINE, COUNT, DEPTH, EXISTS, EXPLODE, FACTOR,
       FACTORIAL, FILTER, FLATTEN, FOLD-LEFT, FOLD-RIGHT, FOR-ALL,
       HYPER, IMPLODE, INTEGER-SQRT, INTERSECTION, IOTA, LIST->SET,
       MAKE-PARTITIONS, MERGESORT, PARTITION, PERMUTE, QUICKSORT,
       READ-LINE, REMOVE, REPLACE, SUBSTITUTE, SUM, TRANSPOSE, UNION.
2009-01-11
       Fixed a few more routines that relied on fixed string and vector
       locations and may be broken by vector pool compaction.
       Potentially affected: DEFINE, DEFINE-MACRO, VECTOR->LIST,
       STRING->LIST.
2009-01-10
       I get bitten by this one over and over again. So, note to
       myself:
         C's stupid order of evaluation messes up
         Car[x] = alloc(foo,bar);
         because Car may relocate during GC.
       I have fixed about a dozen instances of this bug in the current
       version, so if you do not like nasty surprises (a.k.a. GC
       leaks), you may want to update.
2009-01-07
       Fix: LOAD-FROM-LIBRARY did not work, because LOAD added bindings
       to the current local environment instead of the global
       environment.
       Loading files should be faster now, because environments are
       re-hashed only once per LOAD.
2009-01-06
       Made s9 -v output more verbose.
       Added LOAD-FROM-LIBRARY procedure.
       Documented internal dynamic variables.
2009-01-02
       Changed allocator strategy. The size of new segments grows
       exponentially now (n^1.5), resulting in a smaller initial memory
       footprint, smaller heap image, and faster adaption to
       memory-intensive applications.
       Changed default memory limit to 12.1M bytes (was 1M bytes).
2009-01-01
       Cleaned up the DEFINE-SYNTAX transformer (s9.scm).
       Fix: the evaluator could block when running out of nodes.
       Added -m size (set memory limit) command line option.
2008-12-14
       Applied some cosmetics.
2008-12-13
       Added -g (GC summaries) command line option.
2008-12-12
       Fixed missing procedure name in some error messages.
2008-12-09
       The interpreter returns to the REPL now when hitting the memory
       limit (MEMORY_LIMIT_KN).
       Changed types of all references to nodes from int to cell in
       order to improve support for 64-bit systems.
       Renamed SYS extension to UNIX.
2008-12-08
       A system called Scheme 9 should run on Plan 9, indeed. Thanks to
       Bakul Shah for pointing this out and helping me to get it
       ported. Thanks to Russ Cox for 9vx.
2008-11-29
       Cleaned up the extension procedure interface. Adding new
       primitives should be a snap now.
2008-11-28
       Cleaned up (internal) definitions of primitive procedures.
2008-11-26
       Moved constant, variable, and macro declarations to a header
       file (s9.h).
2008-11-05
       Fixed a subtle GC bug related to string cloning. Potentially
       affected: STRING-COPY, SYMBOL->STRING, STRING->SYMBOL.
2008-11-01
       Fixed SYS:COMMAND-LINE (would destroy the command line when
       called).
       Cleaned up the build/install process.
2008-10-06
       Fixed a bug that could crash S9 when DEFINEing variables in
       hashed environments. Thanks, Doug Currie.
2008-09-05
       Documented the SYS extension (see s9e(1)).
2008-09-04
       Applied some cosmetics to the syntax rules expander and added an
       example (s9.scm).
2008-09-03
       Applied some cosmetical changes to the C code.
       Cleaned up much of the Scheme code.
       Included experimental SYS extension (see ext/* and EXTENSIONS in s9.c).
       Documented PRINT.
       Added else clause to COND-EXPAND.
       Documented COND-EXPAND.
       Added some macro expansion tests to the test suite.
2007-10-30
       Removed SYNTAX->LIST because it is no longer needed.
2007-10-27
       The interpreter is now printing a call trace in case of an
       error.
2007-10-23
       Fix: DISPLAY can now output NUL characters. (OK, this is not
       really covered by R5RS, but useful, nevertheless.)
2007-10-19
       Extended domain of INTEGER->CHAR to 0..255.
2007-10-17
       Fix: WRITE-CHAR could not output NUL characters.
2007-10-14
       Fix: interpreter core-dumped when $HOME was undefined.
2007-10-07
       Fix: LOAD does not change (CURRENT-INPUT-PORT) any longer.
2007-10-06
       READ now requires string literals to be contained in a single
       line of input.
2007-10-01
       Improved error reporting in DO, LET, and LETREC.
       Allowed multiple expressions in bodies of CASE and improved
       error reporting.
2007-09-28
       Removed record primitives from the interpreter, because they can
       be implemented portably.
2007-09-25
       Removed redundant clauses from FOLD-LEFT and FOLD-RIGHT.
       Fixed a bug in the syntax checker of SYNTAX-RULES.

Major change: re-implemented DEFINE-SYNTAX/SYNTAX-RULES

2007-09-23
       Applied some cosmetical changes to DEFINE-SYNTAX.
2007-09-21
       Added some syntax analysis and error reporting to DEFINE-SYNTAX.
2007-09-20
       Added optional string argument to GENSYM. This argument is used
       as a prefix in generated symbols.
       Added an experimental implementation of DEFINE-SYNTAX and
       SYNTAX-RULES in terms of DEFINE-MACRO.
       Added header to image file format.
2007-09-14
       Updated the man page.
2007-09-13
       Added RECORD-TYPE-MATCHES?.
2007-09-12
       Added record tests to test.scm.
2007-09-11
       Added (record-copy record) => record.
       Added (record-signature record) => sig.
       Added (assert-record-type sig record) => record.
2007-09-10
       Added first-class records as an experiment, including the
       following items:
       - Record syntax and external representation:
         #r((tag value ...)).
       - EQUAL? now applies RECORD-EQUAL? to pairs of records.
       - New procedures:
            - (record '(tag value) ...) => record
            - (record? expr) => boolean
            - (record->list record) => list
            - (list->record list) => record
            - (record-ref record tag) => form
            - (record-set! record tag value) => unspecific
            - (record-equal? record1 record2) => boolean
2007-09-09
       Fix: SIGINT could not interrupt runaway macro expansion.
2007-09-08
       Added support for extension procedures (ext/*, experimental, not
       yet in the distribution archive).
2007-09-04
       Cleaned up the LET macro.
       Documented macros (S9(1)).
       Extended and cleaned up the test suite.
2007-09-03
       Removed EXPAND-SYNTAX procedure.
       Added EXPAND-MACRO procedure.
       Added DO macro.
       Added heap image support for faster start-up.
       Added => syntax of COND.
       Added named LET syntax.
2007-09-02
       Removed DEFINE-SYNTAX and SYNTAX-RULES. It is too cumbersome for
       some purposes and too complex internally.
       Implemented DEFINE-MACRO.
       Added GENSYM procedure, because it is required to write some
       macros.
       Rewrote LET, LETREC, LET*, CASE, DELAY using DEFINE-MACRO.

Major change: switching from DEFINE-SYNTAX to DEFINE-MACRO

2007-08-29
       Misc. small, cosmetical changes.
2007-08-20
       Achieved a speed-up of about 10% by the use of hash chaining.
       Fix: heavy computations involving large lists of integers could
       crash the interpreter during GC. Thanks, Mario Deilmann.
2007-08-09
       Made somes changes to support 64-bit architectures (not yet
       finished).
       Fixed two nasty bugs that potentially could crash the
       interpreter.
2007-08-06
       Made OPEN-OUTPUT-PORT fail when the output file already exists.
       This change also affects CALL-WITH-OUTPUT-FILE and
       WITH-OUTPUT-TO-FILE.
       Added DELETE-FILE and FILE-EXISTS? procedures althouth they are
       not R5RS procedures, because they are simply too handy for
       testing file access procedures.
2007-08-05
       Removed segment matches from the syntax expander, because this
       is not required by R5RS, so (x ... y) is not longer a valid
       pattern in SYNTAX-RULES.
       Fix: the body of COND clauses may be empty.
       Fix: made #\SPACE and #\NEWLINE case-insensitive.
       Fix: CALL-WITH-INPUT-FILE and CALL-WITH-OUTPUT-FILE did not
       close their ports before returning.
       Removed #\LINEFEED (not in R5RS).
       Fix: made LIST? detect cyclic structures.
       Removed R6RS-style comments.
       Made the test suite more general, so that it does not make
       assumptions about behavior not specified in R5RS.
2007-07-21
       Fix: Syntax expansion was done after quasiquote expansion, but
       should have done before it.
2007-07-18
       Fixed a bug in _bignum_divide(): a GC leak could occur when the
       divisor was greater than the dividend.
2007-07-16
       Simplified test suite using DEFINE-SYNTAX. It is smaller,
       cleaner, and also siginificantly slower now (due to syntax
       transformation overhead).
2007-07-06
       Applied some minor, mostly cosmetical changes to s9.c.
2007-07-04
       Fix: STRING-APPEND did not check the types of its arguments.
2007-07-03
       Fixed some comments, renamed some variables.
2007-07-01
       Simplified read_c() and turned it into a macro.
2007-06-30
       Changed representation of #<EOF>, #<UNDEFINED> and #<UNSPECIFIC>
       from symbol to integer (optimization).
       Simplified atomp_p() and made it a macro.
       Directed all interpreter output through pr().
2007-06-29
       Fixed a bug in the syntax expander.
2007-05-26
       Adding hash tables broke **. Fixed that.
2007-05-22
       Added hash tables to environments for faster lookup speed.
       Fix: the sane environment was not GC-safe in the REPL.
2007-05-11
       Fix: `'(,(+ 1 2)) reduced to '(,(+ 1 2)). It now (correctly)
       reduces to '(3).
2007-05-05
       Fix: clauses of CASE could not contain multiple expressions.
2007-04-26
       Made missing program file an error condition in -f program
       command line option.
2007-04-24
       Fix: local ports of WITH-INPUT-FROM-FILE and WITH-OUTPUT-TO-FILE
       were not GC-safe.
       Added -q (quiet) command line option.
       Updated man page.
2007-04-21
       Made more cosmetical changes.
2007-04-20
       Made some minor cosmetical changes.
2007-04-19
       Simplified evaluator (saved one unsave/save).
2007-04-18
       Added patches to make s9.c compile on newer MSC compilers.
       Thanks, Blake McBride.
       De-cluttered code by replacing #ifdefs with ifs.
       Added 64-bit mode for bignum integers for faster operation on
       64-bit systems.
       Fixed LET* with multiple expression body.
2007-04-15
       Added error condition for DEFINE in expression context.
       Updated test suite.
2007-04-14
       Implemented local DEFINEs by rewriting them to LAMBDA and SET!
       (like LETREC).
       Added rc file support: if a ~/.s9fes/rc file exists, it is
       loaded at start-up time.
       Updated test suite.
       Updated man page.
2007-04-13
       Implemented QUASIQUOTE, UNQUOTE, and UNQUOTE-SPLICING.
       Added EXPAND-QUASIQUOTE to library. This procedure rewrites
       quasiquoted expressions to expressions not using quasiquotation.
       Note: you currently cannot quasiquote improper lists.
2007-04-12
       Documented ** (most recent top level result).
       Created a distribution archive.
       Added "install" target to Makefile.
2007-04-11
       Added "additions" section to man page. It describes the non-R5RS
       procedures of S9fES.
       Applied some minor optimizations to EXPAND-SYNTAX.
       Moved part of syntax transformation code into s9.c.
       Added DELAY and FORCE to library.
       Added ** symbol, which always binds to the result most recently
       returned to the REPL.
2007-04-10
       Added SIGINT (abort input or interrupt program) and SIGQUIT
       (emergency exit) handlers. If your system does not support POSIX
       signals, compile with -DNO_SIGNALS to omit signal handling.
       Added -ansi -pedantic compilation flags, removed some flaws.
       Implemented DEFINE-SYNTAX and SYNTAX-RULES special form
       handlers.
       Added SYNTAX->LIST helper (non-R5RS; used in syntax expansion).
       Added EXPAND-SYNTAX (non-R5RS), which performs syntax
       transformation behind the scenes.
       Note: This is an import of the potentially buggy SketchyLISP
       syntax transformer. To be improved.
       Added CASE syntax to library.
       Added LET* syntax to library.
       Updated test suite.
2007-04-09
       Added to library: STRING, VECTOR.
       Added to library: NUMBER->STRING, STRING->NUMBER.
       Added to library: CALL-WITH-INPUT-FILE, CALL-WITH-OUTPUT-FILE,
       newline, WITH-INPUT-FROM-FILE, WITH-OUTPUT-TO-FILE.
       Updated test suite.
       Added -f program command line option.
       Added s9(1) man page.
2007-04-08
       Added library s9.scm which is automatically loaded.
       Added list procedures to library: APPEND, ASSOC, ASSQ, ASSV,
       CAAR...CDDDDR, LENGTH, LIST, LIST-REF, LIST-TAIL, LIST?, MEMBER,
       MEMQ, MEMV, NULL?, REVERSE.
       Added equivalence predicates to library: EQUAL?, EQV?.
       Added type predicate to library: NUMBER?, PORT?.
       Added NOT procedure to library.
       Added higher order procedures to library: FOR-EACH, MAP,
       FOLD-LEFT (R6RS), FOLD-RIGHT (R6RS), MAP-CAR (non-R5RS).
       Added arithmetic functions to library: ABS, EVEN?, EXPT, GCD,
       LCM, MAX, MIN, MODULO, NEGATIVE?, ODD?, POSITIVE?, SQRT, ZERO?.
       Updated test suite.
2007-04-07
       Implemented CHAR-DOWNCASE, CHAR-LOWER-CASE?, CHAR-NUMERIC?,
       CHAR-UPCASE, CHAR-UPPER-CASE?, CHAR-WHITESPACE?.
       Implemented STRING-LENGTH, STRING-REF, STRING-SET!.
       Implemented STRING-APPEND, STRING-COPY, STRING-FILL!, SUBSTRING.
       Fixed a bug in string/vector pool compaction.
       Implemented MAKE-STRING, MAKE-VECTOR, VECTOR-FILL!.
       Implemented <=, >, >=.
       Updated test suite.
2007-04-06
       Implemented OPEN-INPUT-FILE, OPEN-OUTPUT-FILE, CLOSE-INPUT-PORT,
       CLOSE-OUTPUT-PORT.
       Made the garbage collector close unused ports.
       Implemented SET-INPUT-PORT!, SET-OUTPUT-PORT!, both non-R5RS.
       These will facilitate the implementation of WITH-INPUT-FROM-FILE
       and WITH-OUTPUT-TO-FILE.
       Fix: made READ-CHAR and PEEK-CHAR return the EOF object on EOF.
       Implemented CHAR-CI<=?, CHAR-CI<?, CHAR-CI=?, CHAR-CI>=?,
       CHAR-CI>?, CHAR<=?, CHAR<?, CHAR=?, CHAR>=?, CHAR>?.
       Implemented STRING-CI<=?, STRING-CI<?, STRING-CI=?,
       STRING-CI>=?, STRING-CI>?, STRING<=?, STRING<?, STRING=?,
       STRING>=?, STRING>?.
       Updated test suite.
2007-04-05
       Implemented I/O ports.
       Implemented CURRENT-INPUT-PORT AND CURRENT-OUTPUT-PORT.
       Implemented INPUT-PORT?, OUTPUT-PORT?, EOF-OBJECT?.
       Fixed sign error in * with odd numbers of arguments.
       Updated test suite.
       Implemented READ, WRITE, DISPLAY.
       Implemented READ-CHAR, WRITE-CHAR, PEEK-CHAR.
2007-04-04
       Chased a GC bug due to C's braindead order of evaluation.
       Growing memory pools work fine now.
       Fixed some potential GC leaks in the bignum code.
       Made QUOTIENT and REMAINDER handle negative signs correctly.
       Brought test suite up to date.
2007-04-03
       Started test suite.
       Fixed a few bugs in cond.
       Implemented SET-CAR!, SET-CDR!, AND VECTOR-SET!.
       Implemented growing memory pools.
2007-04-02
       Moved most of the type checking code to a central procedure.
       Implemented type predicates: BOOLEAN?, CHAR?, INTEGER?, PAIR?,
       PROCEDURE?, STRING?, SYMBOL?, VECTOR?.
       Implemented type conversion procedures: CHAR->INTEGER,
       INTEGER->CHAR, LIST->STRING, LIST->VECTOR, STRING->LIST,
       STRING->SYMBOL, SYMBOL->STRING, VECTOR->LIST.
       Implemented vector procedures: VECTOR-LENGTH, VECTOR-REF.
       Implemented WRONG (non-R5RS).
       Implemented integer (bignum) =.
       Implemented CHAR=? and STRING=?.
2007-04-01
       Implemented COND.
       Implemented LOAD.
2007-03-31
       Implemented integer (bignum) *, QUOTIENT, and REMAINDER.
2007-03-30
       Implemented LETREC.
       Started implementation of bignum arithmetics.
       Implemented integer (bignum) <, +, -.
2007-03-29
       Implemented CONS, CAR, CDR, EQ?.
       Simplified the garbage collector.
       Removed tedious and buggy variable capture code from lambda.
2007-03-28
       Chased a GC leak, found it, splat! --> *
       Implemented primitive procedure framework.
       Implemented APPLY.
2007-03-27
       Implemented DEFINE (dynamically scoped!).
       Fixed a few bugs in variable capture (could not test this
       earlier).
       Implemented let by rewriting it as an application of LAMBDA.
2007-03-26
       Modified the evaluator to get rid of the L-stack.
       Modified the evaluator to get rid of the B-stack.
       Implemented BEGIN, IF, AND, OR, and SET!.
2007-03-25
       Imported the evaluator from Sketchy LISP.
       S9fES can now run ((lambda (x) (x x)) (lambda (x) (x x))). In
       constant space!
2007-03-24
       Implemented lambda abstraction.
2007-03-23
       Took the garbage collector, reader, and printer from
       Sketchy LISP and gave them an overhaul.
       S9fES supports R6RS-style #|...|# and #;form comments.
