t3x.org / bits / s9fes / changes.html

Scheme 9 from Empty Space

See the S9(1) man page for the current state of affairs.

Change Log

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:
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.

Copyright (C) 2007 Nils M Holm <nmh @ t3x . org>