Version 102, ??, 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, and pair->immutable-pair 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 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., #) 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, ~ 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 => # instead of # 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