See the S9(1) man page for the current state
of affairs.
Change Log
- 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 [link removed].
- 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-ups.
- 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
(define-syntax below, define-macro above)
- 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 comments.
- Made the test suite more general, so that it does not make
assumptions about behavior not spacified 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 startup 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 proecedures 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.
Nils M Holm
<nmh @ t3x . org>