racket/notes/mzscheme/HISTORY
2005-05-27 17:52:04 +00:00

1281 lines
56 KiB
Plaintext

Version 299.106
Changed certification so that a reference cannot have more
certificates than its binding, and lexical context gives
syntax-quoted values inactive instead of active certificates
Added sub-form for require: only
Version 299.105
TCP output ports are now block-buffered by default
Changed file-stream-buffer-mode to work on more port types,
including TCP ports and custom ports
Added extra argument to make-input-port and make-output-port
to get/set buffer mode
Added define-serializable-class[*], externalizble<%>,
class/derived, and inspect clause form to MzLib's "class.ss"
Added define-struct/properties to MzLib's "struct.ss"
Version 299.104
Changed prop:custom-write value to a procedure that writes
to a port
Changed port-count-lines! and port-next-location to work
on output-ports
Changed make-output-port to take three new arguments:
get-location procedure, count-lines! procedure,
and initial position
Added relocate-output-port, transplant-input-port,
and transplant-output-port to MzLib's "port.ss"
Removed pretty-print-display-string-handler from MzLib's
"pretty.ss", and adapted protocol for hook procedures
slightly (i.e., they usually must write to a given port)
Version 299.103
Added prop:custom-write, custom-write?, custom-write-accessor
Changed read-syntax[/recursive] to remove the delta-list
argument
Changed read handler to remove the delta-list argument
Changed read[-syntax]/recursive to produce a special-comment
value when a comment is parsed (instead of reading the
next datum)
Changed make-input-port to take two new arguments: count-lines!
procedure (defaults to void) and initial position
Added relocate-input-port to port.ss
Version 299.102
Fixed all-from provides to include redundant imports from the
indicated require
When { or [ is disabled, it is treated as an illegal character
instead of a symbol character by the reader
Added module-provide-protected?
Added readtables
Added #reader
Struct custodian can be #f to make it fully transparent
Changed run-server in thread.ss to use the same parameterization
for all connection threads
Version 299.100, March 2005
>> See MzScheme_300.txt for information on major changes since
version 209. Relatively minor changes are listed here.
Unicode and Strings:
Removed char-locale... operations
Removed char->latin-1-integer and latin-1-integer->char
Added string-copy!, read-string!, peek-string!, and write-string
Added convert-stream, reencode-input-port, etc. to port.ss
Added \u and \U syntax in strings and chars
Fixed log for large exact integers
Added path-string?, path-replace-suffix
Renamed all of the number "byte-string" functions to "bytes"
Added \' escape for strings (for compatibility with C & Java)
Added locale-string-encoding
Changed regexp-replace* to raise an exception if it matches an
empty string
Added binding of greek-lambda character (code point #x03BB) to
expand to lambda
Paths:
Changed pref dir (all platforms) and pref file name (except Windows);
changed home dir under Windows to use the registry-specified profile
directory
Added 'doc-dir and 'desk-dir to find-system-path
Unix and Mac OS X: path expansion removes redundant slashes
Removed exists check for current-directory
Ports:
Change default buffering of file-stream output ports
Changed file-stream-buffer-mode to work on input ports
Changed make-custom-input-port to make-input-port
Changed make-custom-output-port to make-output-port
Added terminal-port?
Added pipe-content-length
Changed {read,peek}-bytes-avail!{,*,/enable-break} to produce
a special-reading procedure when a stream contains specials
Added make-pipe-with-specials to MzLib's "port.ss"; procedures
like copy-port now also handle specials
Moved most of (lib "thread.ss") to (lib "port.ss"), and many
remaining useless procedures (such as dynamic-enable-break)
were removed
Added port-progress-evt, port-commit-peeked, and
port-provides-progress-evts?
Added an optional progress-event argument to peek-bytes-avail!,
etc., before the port argument
Added an optional progress-event argument to regexp-match-peek
and regexp-match-peek-positions
Peeking from a limited pipe effectively increases its capacity,
temporarily
Added optional port name arguments to make-pipe
and open-{input,output}-{string,bytes}
Changed object-name for input ports and output ports
Added write-special and write-special-avail*
A location-offset lists for a port read handler can contain #f
Changed read-syntax to make the source name optional (defaults
to the port's name)
Syntax and Macros:
Eliminated "identifier for a definition has a module context"
errors
In a syntax template, when an identifier has more ellipses
then in the pattern, inner ellipses bind more
tightly than the outer ellipses
New forms: require-for-template (core), define-values-for-syntax
(core), define-for-syntax, begin-for-syntax
New procedures: local-transformer-expand, syntax-transforming?,
syntax-local-lift-expression, local-expand/capture-lifts,
local-transformer-expand/capture-lift, syntax-recertify,
module-template-identifier=?, identifier-template-binding,
rename-transformer-target
Removed fluid-let-syntax, syntax-local-certifier
Added (lib "stxparam.ss"), partly as a replacement for
fluid-let-syntax
Removed use of #%top from references to a module's own bindings
Added protect sub-form of provide
module-compiled-imports now returns 3 values
indentifier-[transformer-]binding returns a list of five items
instead of four for a module-bound identifier
Added 'module-begin to the set of possible results from
syntax-local-context
Added begin-with-definitions to (lib "etc.ss")
Added syntax-property-symbol-keys
Added namespace-unprotect-module
Changed eval, expand, etc. so that only the leading
identifier in a module form is given context
Changed module expansion/compilation so that it's deterministic,
as long as macros do not use gensym or external side-effects;
using generate-temporaries preserves determinism
Changed module->namespace and module re-definition so that they're
controlled by the code inspector, not the modules attach state
Added current-compile parameter, which is used by compile
and by the default evaluation handler
Changed expansion-time structure type info to allow #f in place
of a mutator id
Added construct-time field guards to structure types
Changed raise-syntax-error so that it no longer accepts a list
as its first argument
Reader Syntax:
Added #<< here strings
Added H-expression mode to reader, triggered by #hx or #honu,
and escaped by #sx
Added read-honu, read-honu-syntax, and print-honu
Changed #; for top-level read; graph assignments are forgotten
before reading the next expression
Control Flow and Paramaters:
While an exception handler is called, the current exception
handler is reset to the default handler; similarly,
the error display and escape handlers are called by the
default exception handler in a context that resets the
corresponding parameters to the default handlers
An exception handler can handle exceptions that are raised
during the handler (by using with-handlers or setting the
current-exception-handler parameter)
During the evaluation of dynamic-wind pre and post thunks,
the current continuation marks and parameterization are reset
to those active at the time of the dynamic-wind call
(except that the parameterization is extended to disable
breaks)
Added current-parameterization and call-with-parameterization
Added continuation-mark-set-first
Removed optional argument of continuation-mark-set->list
Added continuation-mark-set->list*
Added call-with-continuation-barrier
Renamed "continuation boundary" to "continuation barrier"
Added call-with-semaphore and call-with-semaphore/enable-break
Events:
Renamed udp-send-evt and udp-receive-evt to udp-send-ready-evt
and udp-receive-ready-evt
Added udp-send-evt, udp-send-to-evt, and udp-receive!-evt
Added tcp-accept-evt
Added make-alarm
Misc:
Regexp grammar changed to match docs with respect to "-"
Struct property types are now overridable in subtypes
Added module-compiled-exports
Added hash-table-copy and hash-table-count
0.0 and -0.0 are now considered the same by eqv?
Changed the random-number generator to use L'Ecuyer's MRG32k3a
algorithm, as encouraged by SRFI-37
Changed random to accept 0 arguments to generate a random real
number, and added pseudo-random-generator->vector and
vector->pseudo-random-generator; these are compatible
with the SRFI-27 reference implementation
Added print-unreadable parameter
Changed use-compiled-file-kinds to use-compiled-file-paths
Mac OS X: extension suffix changed from ".so" to ".dylib"
Libraries:
"class.ss" MzLib module: changed the interface to
make-primitive-class; see plt/collects/mzscheme/examples/tree.cxx
for details
"serialize.ss" MzLib module: new
"contract.ss" MzLib module: names are more uniform; if the name of a
contract a suffix, the suffix is now "/c" (instead of one of "/p",
"/c", or "/f")
"url.ss" in the "net" collection: new url data definition; url/user is
gone, and no extra encoding/decoding required once a url has been
parsed anymore
Inside MzScheme:
Added scheme_set_type_printer, scheme_print_bytes,
and scheme_print_string
Version 209, December 2004
Fixed (abs -1073741824)
Avoided gcc 3.4 bug(?) related to inline checking for -0.0
Version 208, August 2004
Added string-copy! and hash-table-count
Upgraded to gc 6.3
Version 207, May 2004
Fixed comparison of infinities and 0.0 in eqv?
Fixed incorrect handling of -0.0 versus 0.0 for various
platforms, including x86 with gcc 3.2
Fixed inefficient (/ x 1) for an exact rational x
Version 206, January 2004
A shut-down custodian is no longer allowed to manage new
objects
Changed thread-resume so that it adds custodians to a thread,
instead of changing the thread's custodian
Added make-thread-group, etc.
Changed define to support MIT-style curried-procedure forms
Added an optional argument to peek-char and
peek-char-or-special to indicate the number of characters
to skip in the input stream
Added optional argument to file-or-directory-modify-seconds
for setting the modification date of a file or directory
Added integer-sqrt, quotient/remainder, integer-sqrt/remainder
Fixed transitivity of numerical comparison for mixed
inexact--exact comparisons when the inexact versions
of the numbers are = but the exact versions are not
Macro templates can include consecutive ... for splicing
sequences
Macro patterns can include sub-patterns after ...
Improved error reporting for with-syntax
Non-constant syntax pairs generated from templates
(in syntax-case, with-syntax, quasisyntax, etc.)
keep source-location and context information,
instead of acquiring the context and location of
the generator expression as a whole
generate-temporaries produces identifiers that are
suitable for use as defined names in the module
being expanded (if any)
Added syntax-local-module-introduce, which is used
by generate-temporaries
Added syntax-track-origin
Changed syntax-local-get-shadower to add the current
module expansion context, if any
Added 'disappeared-binding and 'disappeared-use properties
and refined 'origin tracking for internal definitions
and spliced sequences
Added optional namespace argument to most of the
namespace- primitives
Added vector-immutable
Fixed a bug in the bytecode verifier that caused it to skip
significant parts of typical bytecode
Added a hook for (planet ...) module paths to the standard
module name resolver
MzLib's contract.ss: changed and/f to and/c, or/f is deprected
(use union), added object contracts, flat-contracts (without
names) are a separate type; use flat-contract-predicate rather
than flat-named-contract, added flat-rec-contract, improved
performance
MzLib's class.ss: added get-field and field-bound?
Version 205, August 2003
Extended regexp language with "(?:...)"
Added 'addon-dir for find-system-path
Changed default library collections path list to include
(build-path (find-system-path 'addon-dir) (version) "collects")
Added #; reader comment syntax
Added namespace-module-registry
Added module->namespace
Changed eval handler so that when it is given a syntax object, it
does not extend the object's lexical context with top-level
bindings from the current namespace
Added namespace-syntax-introduce
Added eval-syntax, compile-syntax, expand-syntax, expand-syntax-once,
and expand-syntax-to-top-form
Added set!-transformer-procedure
Added namespace-undefine-variable!
syntax-local-context can return a list for internal-define
expansion, and local-expand accepts a list to mean
internal-define expansion; for built-in expansion, each
list item uniquely indicates a distinct, active
internal-define expansion context
Added syntax-local-get-shadower
Changed top-level `define-syntaxes' to treat zero results
from the right-hand side as an abort, so that
(define-syntax (id ...) (values))
declares the ids. This is useful for macros that
expand to mutuaully recursive definitions of private
variables
Changed the expansion-time information associated with a
struct type to include an identifier for the super-type
Handling of --main/-C command-line flag changed
Changed "scheme-<dialect>" script handling to add the script
path as an argument, which matches SRFI-22
Changed Windows extension-linking convention; extensions
link directly to the MzScheme/GC DLLs
Added an optional argument to system-library-subath
Added custodian-managed-list
Changed vector-set-performance-stats! to accept an optional
thread argument for thread-specific stats
Mac OS Classic: file-size result no longer includes
the resource-fork size
Added a `super-new' local form to (lib "class.ss")
Added a `new' form to (lib "class.ss")
3m: changed to the calling convention for managing
GC_variable_stack
Version 204, May 2003
Added UDP operations
Added synchronous channels
Added thread-suspend and thread-resume
Added thread/suspend-to-kill
Added thread-dead?
Added thread-suspend-waitable, thread-resume-waitable,
and thread-dead-waitable
Added make-wrapped-waitable, make-guard-waitable, and
make-nack-guard-waitable a la CML
Added waitables->waitable-set, which is like CML's choose
Renamed make-nack-waitable to make-nack-guard-waitable
to claify its relation to make-guard-waitable
Added make-poll-guard-waitable
Added make-semaphore-peek
Added current-wait-pseudo-random-generator
Changed unreachable threads to be garbage-collected when
blocked on any combination of otherwise unreachable
waitables by object-wait-multiple, semaphore-wait,
channel-put, channge-get, or thread-wait; in addition,
unreachable suspended threads are garbage-collected
Added "async-channel.ss" to MzLib
Changed make-custom-input-port to drop the initial
waitable argument; instead, the read and peek
functions should return a waitable instead of 0
Changed make-custom-output-port so that the first
argument is #f or a procedure to return a waitable
(instead of #f or a waitable)
Added tcp-port?
Added port-file-identity
Deprecated normal-case-path
Changed the symbolic name for a file-based module to be
determined without using normal-case-path
Fixed MzLib's regexp-split, etc., to work on input ports
Changed make-struct-type-property to accept a guard
procedure for the property
Changed make-struct-type to accept a list of immutable
field positions
Changed struct-type-info to return 8 values instead of 6
to include information on immutable fields
Changed proc-spec handling in make-struct-type; an integer
value must be < init-field-k, and overriding is disallowed
(for consistency with user-defined properties)
Added prop:waitable
Changed handling of top-level and module top-level definitions
of identifiers that originate from a macro expansion; such
definitions now bind only the uses of the identifier with the
same expansion origin
Added make-syntax-introducer, for creating new macro origins
Changed generate-temporaries so that it does not use gensym,
but instead uses make-syntax-introducer to distinguish names
Added make-rename-transformer and rename-transformer?
Changed syntax-local-value to cooperate specially with
rename transformers
Fixed parse problems with # in numbers, as in `1#/2' and
`#e#x+e#s+e@-e#l-e'
Added literal hashtable syntax #hash..., added support
for immutable hash tables, and added print-hash-table
parameter
Added literal regexp syntax #rx... and changed the printer
to use this notation for printing regexps
Changed hash-table? to accept 'weak and/or 'equal and return
#t only if the first argument is a hash table created with
the corresponding flag(s)
Changed equal? to compare hash tables by determining whether
they map the same keys to equal? values
Added vector->immutable-vector
Added immutable-box
Added vector-set-performance-stats!
Changed columns to count from 0 instead of 1
Version 203, December 2002
Added support for structure types whose instances act as
procedures
Added open-input-output-file
Added port-count-lines-enabled parameter
Version 202, August 2002
Changed expansion of () to '()
Unix: Fixed open on fifos to not block
Windows 9x: Added workaround for resolution of "127.0.0.1"
Version 201, July 2002
Fixed bug in port reading (especially variants of read-string)
and file-position that follow peeks on the port
Added exn:special-comment, expected to be used by custom input ports
that contain non-character-based comments (e.g., the comment boxes
soon to appear in DrScheme)
Windows: added special handling of "special files" (COM1, etc.);
internally MzScheme opens the file only once to satisfy multiple
open-input-file and open-output-file calls that have the
port open at the same time
Version 200, June 2002
>> See MzScheme_200.txt for information on major changes in
MzScheme 200. Minor changes are listed below.
(cond) alays returns void; the cond-allow-fallthough parameter and
exn:cond exception have been removed
Changed all comparison precedures to require at least two
operands, including =, <, ..., char=?, char<?, ...,
string=?, string<?, ...
Added locale support with string-locale<?, etc.
Added integer-byte-string->integer, floating-point-byte-string->real,
integer->integer-byte-string, real->floating-point-byte-string,
Renamed exn:misc:user-break to exn:break
Removed the port field of exn:read
Renamed arity to procedure-arity
Replaced primitive-name and inferred-name with object-name
Added security guards for controlling file and network access
Added an "infix" conversion in the reader, triggered by a pair of dots
between a pair of parens
Added #cs and #ci prefixes for controlling case sentivity during read
Added current-command-line-arguments parameter
Added error-print-source-location parameter
Added current-load/use-compiled parameter
Changed string constants to support ANSI C escapes (e.g., \n)
Fixed leaks (file descriptors, etc.) that could happen with
thread kills
Fixed memory bug in the run-time support for mzc-compiled code
Fixed an old and serious set of tail-call+thread-or-exception+GC bugs
in the core interpreter
Changed the error display handler to take a raised value (usually
an exception record) as a second argument
Removed make-hash-table-weak and changed make-hash-table to
accept up to two flag arguments: 'weak and/or 'equal
Added eq-hash-code and equal-hash-code
Extended regexp-match, etc. to work on port inputs
Added read-strng-avail!* and write-string-avail*, which never block
Added peek-string, peek-string-avail!, peek-string-avail!*,
and peek-string-avail!/enable-break
Added port-count-lines!, which enables line-couting for a port,
and port-next-location
Extended custom ports to support non-char input, added
read-char-or-special and peek-char-or-special
Added immutable?
Quoted portions of a symbol (using | or \) preserve their case,
Added read-dot-as-symbol and read-accept-quasiquote parameters
Added an optional third argument to tcp-listen to reuse addresses
Added tcp-connect/enable-break and tcp-accept/enable-break
Added object-wait-multiple and object-wait-multiple/enable-break
Added cons-immutable, list-immutable, and list*-immutable,
and removed pair->immutable-pair
Replaced read-dot-as-symbol with read-accept-dot
Fixed quotient, remainder, and modulo when the first argument
is exact 0 and the second argument is inexact
Default for pconvert.ss's whole/fractional-exact-numbers parameter
changed to #f
Load handler or load extension handler now takes two arguments
instead of one: the filename and the expected module name
Added shell-execute for Windows
Moved send-event to MrEd; added a "sendevent.ss" MzLib library
Changed assf in MzLib
Added special handling when MzScheme is invoked with the name
"scheme-<dialect>", useful to support SRFI-22
New implementation of Windows I/O
Renamed "2k" to "3m" (for "moving memory manager")
Upgraded to gc 6.1alpha2
Inside MzScheme: changed type of third argument for
scheme_block_until() from void* to Scheme_Object*
Inside MzScheme: added scheme_add_waitable() and
scheme_add_waitable_through_sema() for extending the set of objects
supported by object-wait-multiple
Version 103, August 28, 2000
Changed define-values and set!-values to require distinct variables
for binding
Windows: Fixed bug in close-output-port for TCP ports
Closing a TCP output port always sends an EOF to the other
end of the connection, even if the associated input port
remains open
Changed order of first two arguments to process[*]/ports and
fixed bugs
Added an optional limit argument to make-pipe
Added deflate.ss library to MzLib, providing gzip, etc.
Added not-break-exn?, useful mainly as a predicate in a
with-handlers expressions
Fixed load/use-compiled, require-library, and many MzLib functions to
propagate break exceptions correctly
Added check-parameter-procedure and changed parameterize
Changed order of first two arguments to process[*]/ports, and
fixed bugs
Fixed bugs in (eval (compile e))
Changed handling of pre- and post-queued breaks by
call-in-nested-thread
Unix: fixed interaction among signals, I/O, and process sleeping
Unix: fixed bug in writing/closing file-stream output ports
when a write error occurs
MacOS: changed `split-path' to preserve the colon suffix on a root
name
Version 102, June 26, 2000
Switched to configure-based makefiles (autoconf)
with-input-from-file and with-output-to-file close the port when
control leaves the dynamic extent of the call (normally, through an
exception, or through a general continuation jump).
Added detail field to exn:i/o:filesystem
Added immutable strings and pairs, string->immutable-string,
cons-immutable, list-immutable, and list*-immutable
Added read-decimal-as-inexact parameter
Fixed number reader to allow +inf.0, -inf.0, and +nan.0 in
complex constants
Fixed bugs in number reader for hexadecimal numbers containing `.'
and/or `s'/`l'-based exponents; note that `#e#x+e.s+e@-e.l-e'
is a legal number(!)
Fixed reading from special devices, such as /dev/null and /dev/zero,
in Solaris and HP/UX
Fixed blocking output (to stdout, stderr, or a process port) so that
only the writing thread is blocked
Changed read-string! to read-string-avail!, added
read-string-avail!/enable-break
Added write-string-avail and write-string-avail/enable-break
Added process/ports and process*/ports
Added file-stream-port?
Added 'update to the set of flags for open-output-file et al.
Changed default exit handler to return only results in 0 to 255
as results to the OS, and everything else means 1
Changed time-apply to return four values, and to take an argument
list to provide to the timed procedure
Change find-executable-path to accept #f as its second argument
Change normal-case-path to remove spaces at the end of a path
Changed angle on inexact zero (0 for 0.0, pi for -0.0)
Fixed arithmetic-shift for a -32 shift
Fixed angle on +nan.0
Fixed expt on 0 and a negative number
Added 'exec-file flag to find-system-path
Added provide-library
Added square and mergesort to MzLib's function.ss
Added tcp-addresses
Added -k command-line flag
Inside MzScheme: provided a way to fix the GC--thread problems
under Windows, via GC_use_registered_statics
Inside MzScheme: scheme_basic_env() initializes break-enabled
to #f instead of #t
Inside MzScheme: changed scheme_get_chars to consume an
offset into the string
Inside MzScheme: added embedding-settable function
scheme_console_output, used to report low-level errors
Inside MzScheme: restricted the format strings accepted by
scheme_signal_error, scheme_raise_exn, and scheme_warning
Inside MzScheme: added scheme_count_lines; scheme_tell_line
can return -1 if lines are not counted for a port
Inside MzScheme: added offset argument to scheme_write_string
and scheme_read_bignum
Version 101, October 25, 1999
Added 'sys-dir to find-system-path
Added latin-1-integer->char and char->latin-1-integer
Added time-zone-offset field to the date structure
Added continuation field to exn:misc:user-break
Windows: all network sockets are closed on exit
Fixed (acos 0)
Fixed (expt x y) where x is negative and y is non-integral
Inside MzScheme: scheme_param_config's 2nd argument is
now a Scheme_Object*
Version 100, August 9, 1999
+ indicates a change since 100alpha4
* indicates a change since 100alpha3
Changed class syntax, splitting public clause use into:
public : defines ivars not in superclass
override : defines ivars already in superclass
Changed empty superclass from the empty list to object%;
every class initialization must call super-init
Added ivar-in-interface?
+ Added class-initialization-arity
* Added class->interface
* Added object-interface
+ Removed object-class
+ Removed ivar-in-class?; replace (ivar-in-class? x c)
with (ivar-in-interface? (class->interface x c))
Changed interface: raises an exception if a superinterface
declares a variable that is also declared in the interface
expression
Removed letrec*; letrec has the same semantics
* Fixed scope of function name in a named let
Internal definitions are allowed only at the beginning of lambda,
case-lambda, let, let-values, let*, let*-values,
letrec, letrec-values, fluid-let, let-macro, let-id-macro,
let-expansion-time, parameterize, and with-handlers
begin expressions are flattened in an internal-definition context
(begin) allowed in a top-level, unit, or internal-definition
context
Removed invoke-open-unit; see the new invoke.ss library, which
includes define-values/invoke-unit
Self-import is now allowed for unit linking
Removed constant-name and constant-name-all-globals
Removed secure-primitive-exception-types
Removed readable type symbols (e.g., #<procedure>)
Removed semaphore-callback (MrEd now has queue-callback)
Removed parameterizations (but not parameters!)
parameterize sets parameter values in parallel (like let)
instead of in series (like let*)
* Changed the initialization of the exception handler in a new
thread to use the value of the initial-exception-handler
parameter
Fixed unfairness in threads (perpetually creating threads
would starve certain threads, particularly the main thread)
Unreachable thread blocked on an unreachable semaphore is
garbage-collectable
Added current-memory-use
Fixed weak hash table bug (could drop keys too soon)
Added optional peek-proc argument to make-input-port
Changed TCP writes to block when the underlying implementation
blocks, and removed tcp-port-send-waiting?
Asynchronous breaks are now disabled during dynamic-wind
pre and post thunks
Removed user-break-poll-handler; spawn a thread that sleeps and
calls break-thread, instead
Removed dynamic-enable-break (no long needed since dynamic-wind
post thunks can't be broken), but moved it to MzLib's thread.ss
Removed execption-break-enabled (now always disabled)
Added call-in-nested-thread
Removed thread-weight
Renamed the call-with-escaping-continution procedure to
call-with-escape-continution (call/ec is unchanged)
Finished with-continuation-mark and current-continuation-marks
and documented them; the errortrace poor man's debugger relies
on continuation marks; see plt/collects/errortrace/doc.txt
Removed debug-info-handler and replaced the debug-info field
with a continuation-marks field
Added raise-mismatch-error
MacOS: getenv and putenv work within MzScheme; if a file named
"Environment" resides in MzScheme's folder, it provides the
initial environment; see the documentation for details
MacOS: fixed TCP problems
Fixed read-write invariance for inexact (floating-point) numbers
Changed handling of inexact can complex numbers towards compliance
with Brad Lucier's proposal:
(* 0 x) = 0 for all x
(log 1) = 0, etc.
-0.0 and 0.0 are properly distinguished; (- 0.0) = -0.0, and
(/ (expt 2 400) -inf.0) = -0.0; (eqv? 0.0 -0.0) = #f even
though (= 0.0 -0.0) = #t
Complex numbers can have an inexact real/imaginary part with
an exact zero imaginary/real part; thus, 4.0 is different
from 4.0+0.0i, and 0+4.0i is different from 0.0+4.0i; note
that (sqrt -4.0) is 0+2.0i
Complex numbers can have a +nan.0 real/imaginary part with
an imaginary/real part that is not +nan.0
All zero-length vectors are eq
Vectors are written (but not displayed) using the Chez-style
#n(...) shorthand by default; added print-vector-length
parameter
* The value of a built-in procedure is eq across namespaces
Replaced require-library-use-compiled with use-compiled-file-kinds
Changed interface for wills: no current executor, register-will
-> will-register, will-executor-try -> will-try-execute, added
will-execute
MzLib cleanup:
Removed `@' suffix for embedded units in mzlib:core@ and mzlib@
Removed all c.ss libraries, plus constan[t].ss
Removed catch-errors and let-enumerate from macro.ss
Removed make-class and make-class* from compat.ss
Removed zsin, zcos, ztan, zasin, zacos, zatan, zlog, zexp,
and zsqrt from zmath.ss (MzScheme's built-ins do complex)
Moved from functio.ss to thread.ss: dynamic-disable-break,
make-single-threader
Removed from functio.ss: dynamic-wind/protect-break
Added to thread.ss: dynamic-enable-break
Moved MzLib's compat.ss out of the core
Removes all but the first two arguments to pretty-print (the
rest have parameters, which are more convenient anyway)
Changed require to reference-file in refer.ss
file.ss library: added make-directory*
pretty-print: default display string handler is now the default
port display handler instead of the display procedure
Ported to BeOS
Ported to OSKit
Ported to LinuxThreads, sortof; semaphore-waiting threads cannot
be broken or killed
Inside MzScheme: new built-in type: scheme_complex_izi_type
Inside MzScheme: changed scheme_eval_string to raise an exception
if the expression returns multiple values, and added
scheme_eval_string_multi
Version 53, July 25, 1998
Changed file-modify-seconds to file-or-directory-modify-seconds
Changed rename-file to rename-file-or-directory
Changed file procedures to return void on success and raise
and exception on failure: delete-file, rename-file-or-directory,
file-size, copy-file, make-directory, delete-directory
Changed the procedures file-or-directory-modify-seconds and
file-or-directory-permissions to raise an exception if the
file/directory does not exist
Changed current-drive to raise exn:misc:unsupported on platforms
other than Windows
Added find-system-path
Fixed expand-defmacro for initialization argument expressions
in a class*/names form
Fixed call/ec bug related to dynamic-wind (see !!! in
tests/basic.ss)
Fixed dynamic-wind bug: multiple levels of pre-thunks for a
jump into a continuation were evaluated in reverse order
Fixed atan: second argument is allowed to be an exact non-integer
Fixed equal?: comparisons on equivalent vectors or structs
with cycles no longer crash (until MzScheme runs out of memory)
Added make-temporary-file to MzLib's file.ss
Changed random and random-seed to use a parameter-specified
random number generator; the generator is initially
seeded with a number based on (current-milliseconds)
Removed the obsolete MzLib trigger library
Added with-continuation-mark and current-continuation-marks,
but these have not yet been documented because their
semanticses are not yet finalized
Version 52, May 25, 1998
R5RS non-compliance reduced to macros
Added scheme-report-environment, null-environment, and
interaction-environment
Changed reference-library, etc. to require-library
and changed require-library, etc. to require-library/proc
Changed uq-ivar and uq-make-gerenric to ivar/proc and
make-generic/proc
current-directory is now a parameter
Added simplify-path
Changed execute and execute* to exit via the exit handler
Top-level definitions are no longer allowed in the branches
of an if expression; consider replacing an expression like
(if ... (define x ...)) with
(if ... (global-defined-value 'x ...))
expand-defmacro now signals the same set of syntax errors
as compile and eval
local-expand-defmacro no longer expands define expressions
in a non-top-level context; to implement a macro that
detects define forms, use local-expand-body-expression
Fixed bug in (let/ec a (let/ec b (let/cc k ...))); calling
b then k then a would fail, jumping to b instead of a
Fixed read-eval-print loop when jumping to the continuation
of a previous eval and raising an exception there before
the evaluation finishes
regexp-replace and regexp-replace*: \$ ("\\$" in Scheme)
is now replaced by the empty string; this allows forms
like "\\0\\$3", which inserts the 1st submatch and "3"
Fixed a potential bug with continuations (although I never
saw it happen); they need to be marked by the GC with
interior pointer marking
Changed read-line to break lines only on #\newline by default;
new optional argument roughly parameterizes over the
line-breaking character(s)
Add read-string and read-string! for reading a block
of characters from a port
Changed MzLib's read-string and read-string-all to
read-from-string and read-from-string-all
Changed MzLib's with-semaphore to return the value returned
by the thunk.
Added the command-line macro to MzLib's cmdline.ss
Linux and FreeBSD: turned on support for using more
than 256 file descriptors
Inside MzScheme: current-directory, now a parameter, no
longer sets the current directory as managed by the OS
Inside MzScheme: scheme_split_pathname changed
Inside MzScheme: scheme_setcwd and scheme_getcwd renamed to
scheme_os_setcwd and scheme_os_getcwd; these set and get the
OS-managed cwd, but they have no effect on the current
directory seen by Scheme code
Version 51, March 25, 1998
Changed load/use-compiled: searches for .zo files in
a "compiled/" subdirectory, and searches for .so/.dll
files in (build-path "compiled" (system-library-subpath))
Changed load and current-load/default-load-handler: `load'
now sets the current-load-relative-directory, so a load
handler does not need to set this parameter
Added current-load-extension (load-extension handler)
Unix: fixed file-or-directory-permissions for group-based
permissions when the group is not the current group (but
still includes the user)
Windows: fixed directory-exists? et al. for UNC paths
Added local-expand-body-expression
Removed input-port-post-semaphore; this procedure can be
implemented using thread, peek-char, and semaphore-post
Fixed thread: thunk can return any number of values
Fixed custodian-shutdown-all: if it has to shutdown the
current thread, it does so immediately instead of
waiting for the next thread context switch
Fixed will executors: will can return multiple values
Added link-exists?
Added copy-file
Added path-list-string->path-list
Added collection-path
The delete-file and rename-file functions now reliably work
on links rather than the destination of the link (now fixed
for MacOS and documented this way)
Fixed rename-file: works for directories too, but the
destination file/directory cannot exist already.
Added a new mode flag for open-output-file et al.:
'truncate/replace tries 'truncate then 'replace
Changed initial setting of current-library-collection-paths
Unit definitions and embedded definitions are not allowed
to shadow syntax or macro names; this restriction resolves
all potential ambiguity resulting from shadowing syntax
Changed display for symbols containg special characters:
the special characters are not escaped (or bar-quoted)
Changed write to use the value of (read-accept-bar-quote)
for printing symbols containing special charaters; if
bar qute reading is off, it is turned off for printing, too
Fixed unit/sig: correctly handles syntax where defintions in
the unit shadow syntactic forms
Fixed round of exact rational n/d in the case when (odd? d)
and (= (remainder n d) (quotient d 2))
Extended exp, sin, cos, tan, log, asin, acons, atan to
complex numbers; changed sqrt to choose the root with a
positive real part
Removed rectangular <, >, <=, >= for complex numbers
Changed storage of loaded-library table from built into the
`require-library' procedure to built into the current
namespace
Added require-relative-library
Fixed error messages for +, -, etc. to show all arguments
Fixed format, fprintf, and printf: "~~" allowed at the end
of the format string
Fixed with-handlers: predicate procedures are evaluated
with the same exception handler as a handler procedure
Added send-event, currently only supported for MacOS
Changed MzLib's pconver.ss libraries; the print-convert-hook@
unit was removed (along with the pchookr.ss library) and
replaced with parameters defined in pconverr.ss for similar
(more powerful) hooks.
Fixed interfaces for compiled-file (.zo) loading across
MzScheme startups
Fixed bug in ports returned by make-pipe that caused
spurious eofs
Unused interned symbols are now garbage-collected
Added support for single-precision floating points (turned
off in default compilation)
Changed read-eval-print-loop, removing its cooperation with
the default error escape handler; instead, it installs its
own error escape handler
Improved the support for dynamic extensions that gives an
error if an extension is already loaded, or calls a
reloading function provided by the extension (scheme_reload)
Unix images: removed constraint against using stdio before
dumps, but images are disabled by default. Also added
read-image-from-file procedure
MzLib functio.ss: added remv*, remq*, remove*, filter,
assf, memf, empty, and empty?
MzLib file.ss: added remove-directory/files
MzLib constan.ss: added constant-signature-content macro
MzLib pconver.ss: added whole/fractional-exact-numbers and
empty-list-name
MzLib pretty.ss: added pretty-print-show-inexactness
MzLib compile.ss: changed the set of compilation flags
Removed begin-expansion-time
Moved begin-elaboration-time from MzLib into MzScheme
Added MzLib library traceld.ss
MacOS: MzScheme always prompts for extra arguments, even if
a file is dragged onto the application or a launcher program
starts it
MacOS: Fixed problems with inexact arithmetic: inexact->exact
for certain negative numbers and miscellaenous inf.0 and
nan.0 problems
Windows: CYGWIN32 gcc compiler now supported
Inside MzScheme: scheme_setjmp and scheme_longjmp now
work on values of type mz_jmp_buf instead of jmp_buf
Inside MzScheme: scheme_apply_multi and scheme_apply were
reversed! (The _ forms where ok.)
Upgraded to gc 4.13alpha1
Version 50, August 26, 1997
Added compile-time inferrence of names for closures, classes,
and units to improve error messages
Added inferred-name
Added file-size
Added write-image-to-file for creating heap images of a
MzScheme program
Fixed reader to disallow . in vectors: #(1 . 2) or #(1 . (3))
Removed global-defined-signature
Fixed string->number: explicit radix in string can override
radix argument
Bug fixed in call/cc related to dynamic-wind (see !!! in
tests/basic.ss)
Fixed weak hash table's accumulation of hashing buckets
Added 'empty flag for make-namespace
Added two-argument form for global-defined-value
Added system-library-subpath
Changed standalone mzscheme to return -1 if a loaded file
or evaluated expression returns an error without the rep
Refined error messages
Version 49, May 31, 1997
Multiple superclass inheritance is no longer supported
Added (Java-ish) interfaces to object system
class* syntax changed to accomodate interfaces and removed
multiple superclasses
uq-ivar always takes two arguments; class is not a legal argument
uq-make-generic accepts a class or an interface
Object system exceptions changed
Added custodian system
Embedded define conventions changed: "regular" defines are only
allowed in begin expressions and the branches of an if;
embedded defines can appear in a begin0 expression, but not
in the first position; defines must all appear at the beginning
of the block
Contents of a begin expression as an immediate unit or unit/sig
expression are promoted to immediate expressions
case supports only R4RS syntax; a single non-list "datum" is
no longer allowed
Removed catch; use let/ec instead
Removed vector-append
Removed load-with-cd (use load/cd)
Added load/use-compiled
Added current-load-directory parameter (set by the default load
handler while loading a file) and load-relative (uses the
parameter for loading a relative filename)
unit/sig's include form is like load-relative instead of load/cd
require-library uses load or load/use-compiled instead of load/cd
Windows: expand-path does not put a drive on a driveless path
anymore; use path->complete-path instead
compile-file moved out of MzScheme into MzLib "compile.ss"; now
takes a single flag list argument instead of two final Booleans
current-base-parameterization parameter replaced with
parameterization-branch-handler parameter
Parameterizations support sharing (in addition to defaulting);
see docs for make-parameterization-with-sharing
Added print, port print handlers, and a global port print handler
Changed the default print handler to use print instead of write
Fixed bug in ports returned by make-pipe
Fixed bug in dynamic-wind; continuation jumps into the pre-thunk
had a non-intuitive semantics; the correct semantics is now
implemented and documented (also for jumps with the post-thunk)
Changed time-apply to always return a list as its first return
value; time form can return multiple values for its expressions
format, fprintf, and printf are case-insensitive for ~ directives;
added ~v, ~e, ~<whitespace>
Added semaphore-wait/enable-break
Added thread-running? and thread-wait
Fixed bug in threads and timed sleeping
Fixed bug in breaking a blocked thread
Fixed bug in continuations returning multiple values through a
dynamic-wind (multiple return values could be corrupted)
Fixed arity reporting for continuations
Fixed Windows system* and read from console stdin and process*
ports: MzScheme threads no longer blocked; ctl-c breaking works
in stand-alone console MzScheme
process and process* now return a list of 5 values (instead of 4)
map, for-each, andmap, and ormap raise exn:application:map-arity
when the procedure's arity does not match the number of supplied
lists; note that (map (lambda () 10) null) now signals an error
list-ref and list-tail accept arbitrarily large indices
Type for indices changed: must be an exact integer (matches R4RS better)
affects make-vector, vector-ref, vector-set!, make-string, string-ref,
string-set!, substring, and struct-ref
make-namespace's '[no-]set!-undefined and '[no-]auto-else flags
removed; replaced with two new parameters:
compile-allow-set!-undefined and compile-allow-cond-fallthrough
Fixed in units: (define x y) (define y 0) x => #<undefined> instead of
#<void>
exn:struct's super-type field renamed struct-type for consistency
exn:i/o:filesystem:filename split into exn:i/o:filesystem:path
and exn:i/o:filesystem:file; username exception moved under path
Unix: system no longer blocks other MzScheme threads
Unix: processes created by process and process* are not zombies forever,
anymore. (The SIGCHLD signal is handled appropriately.)
MacOS: dynamic extension suopport via CFM (PPC only in the distributed
applications from PLT)
Windows: removed attempted fix for thread-blocking problem
when reading stdin from console
Fixed auto-flush of stdout for read of stdin
Fixed <, >, <=, >= for certain exact rational number comparisons
Fixed inexact->exact for negative inexact numbers (fractional part
was added to the resulting number with the wrong sign)
Fixed rational? to answer #t for inexact numbers
Fixed odd?, even?, and trig functions for +inf.0 and -inf.0
Fixed handling of +nan.0 by many math routines; fixed +nan.0 for
everything under Windows
Added R4RS rationalize
compound-unit/sig export var clause syntax now matches documentation
Added require-library-use-zo
Moved cons? and last-pair into functio.ss instead of compat.ss
Library system generalized to supoprt multiple collections;
current-library-path replaced with current-library-collection-path
require-library now returns the result of the loaded library
Removed load-recent from MzLib's file.ss; use load/use-compiled
instead
Added reference-library, "refer.ss" [core], "XXXr.ss" MzLib libraries
Added build-string, build-vector, build-list, loop-until to MzLib's
functio.ss
Added thread.ss MzLib library [core]
Added inflate.ss MzLib library
Moved synrule.ss out of core
Fixed MzLib's stringu.ss to not use macro.ss
Updated MzLib's spidey.ss, added it to core
Removed define-some, define-virtual-struct, define-struct-tree from
MzLib's macro.ss
begin-expansion-time returns the value of the last expression
set-thread-weight! replaced with 2-argument thread-weight
Inside MzScheme: changed class/object toolbox, added custodian
toolbox
Upgraded to gc 4.11
Version 48: Skipped to avoid confusion with Scheme48
Version 47, January 11, 1997
WARNING: multiple inhertance is going away in the next version or so
Added will executors
pretty-print-print-hook and pretty-print-size-hook now take
three arguments: value display? port
file-position can return the current position for any port
Fixed errors reading floating-point constants due to system
library bugs:
Linux: strtod("0e...", ...) quits looking after "0"
SunOS/Solaris: strtod(".3e2666666666") returned 0.0
HP/UX: strtod(".3e2666666666") fails
Windows: fixed thread-blocking problem for reading stdin from console
Insize MzScheme: when working with "fd_set" values, use
MZ_FD_ZERO, MZ_FD_SET, MZ_FD_CLR, MZ_FD_ISSET; use
scheme_get_fdset() to get the second or third fd_set in an array;
routines for thread-blocking are now documented in "Inside MzScheme"
Version 46, December 5, 1996
unit/sig macros moved out of MzLib and into core MzScheme;
(require-library "unitsig.ss") is obsolete, but still supported
as a no-op
Unit signature matching is now position-independent, and the error
messages are better
Removed obsolete install-unit-with-signature
(begin) or (begin0) is now a syntax error
Changed class* syntax so that an explicit name for `this' is provided
MzLib's class-asi* changed to class*-asi, while adding new `this' id
Prettier(?) printing for prims like >: #<|primitive:>|>
invoke-open-unit w/o path/prefix is now the same as #f instead of ();
the path form will probably be phased out in a future release
quasiquote syntax changed slightly
stdout/stderr are not auto-flushed for read-char or peek-char on stdin
(still flushed by read and read-line)
Added port-display-handler and port-write-handler
Version 45, November 12, 1996
Multiple return values are agressively supported
IMPORTANT: let-values is now analogous to let; the old
let-values is now let*-values
let-values, letrec-values, define-values, and begin0 are primitive
define-struct and let-struct expand to new struct form
Added thread-savy parameterization system; namespace system changed
pipe changed to make-pipe, returns 2 values
Case-sensitivity for the reader is a settable parameter
Reading [] and {} as parens is a settable parameter
class* syntax extended to allow local renaming of public ivars
delay/force support multiple values
else and => in cond and else are now "scoped"
normalize-path from MzLib signals an error for bad paths
Windows: build-path can join a drive to a (driveless) absolute path
and //machine/disk drive names are supported; also fixed
file-system-root-list
Added complete-path? and current-drive (for Windows)
Fixed (begin (values ...) ...) and (begin0 (values ...) ...)
Fixed comparisons between inexact and exact when the
exact to inexact conversion results in overflow or underflow,
and fixed (exact->inexact (/ X Y)) and (/ +inf.0 X), etc. when
X & Y are larger than the largest floating-point, fixed modulo,
remainder, quotient for infinities
Fixed TCP problems (Unix, Windows) and implemented for MacOS
Fixed dynamic-loading to always search from current directory
Fixed real process idling for a timed sleep
Fixed file read/write exceptions (write exceptions now raised)
Fixed quasiquote bug with ,@ and unquoting depth
Fixed filesystem-root-list for Windows
Fixed dynamic-wind when a continuation is invoked from the post-thunk
Fixed continuations for re-entry of a continuation that is mulitply-invoked
Fixed string->number with leading spaces; e.g., (string->number " 1")
invoke-unit import variable restriction removed (locals are allowed)
(case-lambda) is now legal
\ escapes & and \ in regexp-replace replacement string
Added regexp-replace*
Added port-read-handler
Inside MzScheme: Changed use of scheme_sleep
Inside MzScheme: Changed primitive unit init func arguments
Inside MzScheme: Changed primitive accessing of unit boxes and environment boxes
Inside MzScheme: Revoked syntax extensibility
Reimplemented the core interpreter (chained closures -> flattened)
Version 44, September 9, 1996
load, load/cd return value of last loaded expression
scheme_load returns Scheme_Object* or NULL
Built-in TCP support (Not MacOS, yet)
unit clauses macro-expanded before checking `define' keywords
Better dynamic extension handling and compilation support
Fixed read blocking threads in FreeBSD
Extensions' scheme_initialize must return Scheme_Object*
scheme_sleep has internal default for basic sleeping, installed by
scheme_basic_env if scheme_sleep is still NULL
Unix/Winsock: fds arg for needs_wakeup and scheme_sleep expanded
for writes and exceptions
Fixed quotient for inexact numbers
Fixed bug comparing a bignum rational with a fixnum rational
Fixed startup crash when PATH env variable is slightly bad
Sped up thread switching for Mac
Sped up thread switching for most Unix for a small number of threads
Upgraded to gc 11alpha3
Version 43 re-released August 12, 1996 with libguile
Version 43, August 9, 1996
"functor" -> "unit"
signed units added to and used by mzlib (sigfunctors gone)
Made .zo files smaller and faster to load
Use 64-bit fixnums for Alpha
system, system*, process*, and execute* supported for Windows
Fixed memory bug in printing hexadecimal
Fix bug in modulo
Better floating-point control for infinity, nan results
on many platforms
Version 42: June 8, 1996
Functor system added
Fixed (cond (1)), etc.
Fixed type-checking for numerical comparisons; e.g., (< 2 1 'a)
Fixed dynamic-wind and call/ec for values
Fixed read for strings containing #\nul
Non-matching cond/case raises an error
Made string=?, char=?, etc. multi-arity like numerical =, etc.
Changed definition of time-apply (returns values, now)
MzScheme threads can almost be real OS threads under Solaris, but more work
is needed to guarantee safety for the symbol table and globals. More thread
systems to follow.
spawn-eval replaced by make-eval
thread-input-port, thread-output-port, and thread-error-port removed
binary-and, etc. replaced with 2's complement bitwise-and, etc.
Fixed writing compiled quoted graph expressions
Fixed return value of system
test.scm expanded and broken into multiple files: (load/cd "tests/all.ss")
Version 0.41: April 15, 1996
Revised class syntax; see the manual
Exception system added; primitive errors raise exceptions
defmacro replaced by define-macro
Added define-id-macro
Fixed let-macro shadowing local vars
Improved error messages; error-print-width
Fixed stack checking for Win32
'. no longer allowed
unquote and unquote-splicing now defined at top level
equal? supports boxes
Version 0.40: March 24, 1996
structure:X => struct:x
mzlib path uses MZLIB or PLTHOME environment variables
Version 0.39: March 6, 1996
Fixed expand-defmacro for (lambda () (and)) et al.
Fixed sqrt on complex numbers; coefficients were reversed
Cleaned up read and display/write to handle C stack overflow
Arity checking bug fixed for arity 0
Pretty-print is parameterized by depth
Version 0.38: February 22, 1996
Fixed bug in compiling frame-sharing; e.g.,
(let ([d 0]) ((car (cons (let ([a 4]) (lambda () a))
(let ([b 7]) b)))))
returned 7 instead of 4
Fixed bug in closing port by call-with-input-file
Fixed magnitude on negative reals
Fixed angle on negative reals
Fixed cos, sin, etc. on rationals
Fixed min and max on rationals with non-rationals
Fixed (random 0)
Fixed equal? on really long lists
Fixed list procedures with arbitrary duration: checking for break
Fixed char-X? and characters past ASCII 127
Fixed hash table bug that causes infinite internal loop
Fixed bug in reading #| |# comments at the end of a list
Filesystem utilities added
"processes" are now called "threads"; procedure names changed accordingly
eval can return multiple values; r-e-p-l handles correctly
Some changes to compilation interface:
must set new flag is_proc_closure in compile_info rec
scheme_static_distance changed; use flags
scheme_sleep() must now take a float
current-prompt-read added
Console version reads ~/.mzschemerc init file (or mzscheme.rc)
NO_STAT compilation flag -> NO_STAT_PROC
Version 0.37: unreleased
Version 0.36: January 18, 1996
Fixed bug in bignum multiplication
Version 0.35: January 17, 1996
current-print added
x@y notation supported
~ expanded in pathnames (Unix)
Fixed bug parsing #T, etc.
Fixed bug parsing hex numbers and others
Fixed fp-initialization bug for Win32
Better printing for special symbols
Version 0.34: December 30, 1995
Various bignum operations sped up
Chez-style symbol parsing supported (escaping \ and quoting |)
Version 0.33: December 21, 1995
rationals and complex numbers supported
make-class and make-class* syntax changed (one set of parens
added). The old syntax is still supported for now, but you
should convert. The old syntax will eventualy go away (and
Zodiac will never be compatible with it).
class variables and cvar no longer allowed
ivar always takes an object; if class included, must be first
threads/processes changed w.r.t. environment used during execution
error handler split into erro displayer and error escaper
stack limitation of expander/compiler removed
expand => expand-defmacro
expand-once => expand-defmacro-once
user-break-poll => user-break-poll-handler
enable-break => break-enabled
#% now legal for starting non-keyword symbols
full floating-point input format supported
Version 0.32: December 4, 1995
Added weak boxes
+inf.0, -inf.0, -nan.0, +nan.0 constants added
Better checking when using floats as indices (vector-ref, etc.)
Better (correct!) hashing procedure
Fixed threads in Win32s/WinNT by creating a new stack
Fixed bug in spawning new (MzScheme) processes
Fixed incorrect process progress (~deadlock) analysis
Fixed bug in resizing hash table
Fixed bug in read (reading "+", "-", or "." at EOF)
Fixed bug in read-number (fractions and forcing; e.g. "../")
Fixed bug in open-output-string (> 100 chars gave empty result)
Fixed regexp-replace (memory bug)
Version 0.31: November 14, 1995
Bignum bigs: subtracting from 0, comparing negative
(current-eval) initially returned the wrong procedure
tan procedure added
putenv
S-expression graph reading and printing
Version 0.30: October 25, 1995
Added call-with-values and regexp
Unix stack-checking setup code fixed
Version 0.29: October 18, 1995
Added `arity' procedure
Bug fix related to forms such as (let ([x (let ...)]) ...)
Verion 0.28: October 3, 1995
Fixed general stack overflow-checking for Unix
Verion 0.27: September 26, 1995
Moved compilation flags from the Makefile into "sconfig.h"
More general stack overflow-checking (when needed)
Computations can overflow the stack and continue
Changed command line flags; added -r (or --script) flag
Added multiple inheritance and `rename', `share', and `local' declarations
Merged Patrick Barta's Windows DLL implementation for `load-extention'
Re-implemented `quasiquote', `and', and `or' as a macros
Re-implemented let-forms to make small `let's efficient
`let*' expands to `let'
Made core syntactic form names keywords
Added #% keywords
Added `hash-table-map' and `hash-table-for-each'
Fixed bignum bugs: `eqv?'/`equal?' and `modulo'
Fixed inexact bugs: `floor', `ceiling', and `round'
Created this "HISTORY" file