Release Notes for the MzScheme Compiler
(c) 1996-7 Sebastian Good

Version 0 [Aug 7 1996]
---------
preliminary release [R4RS Scheme, no delay]

Version 1 [Aug 28 1996]
---------
incorporates additions/fixes made by Matthew Flatt Aug 8-26, 1996:
  - closures which close over nothing are created only once
  - closures are one structure now, rather than a MzScheme structure
    holding a Compiler created structure.  This greatly improves
    closure creation speed by halving the number of allocations needed
  - tail_buf setup for functions of no arguments eliminated
  - [fix] constants are properly registered with GC
  - [fix] C backend uses longs rather than ints for generic
    (Scheme_Object*) registers
from Matthew: 
  "I'm now getting a 30%-40% speedup by the compiler [compared to the 
   MzScheme interpreter] on 'realistic' programs. While toy benchmarks
   can give remarkably different improvements on different 
   architectures, the 'realistic' programs show a fairly consistent 
   speedup across platforms."

Version 2 [Sep 18 1996]
---------
improvements:
  - define-struct supported at top level, with full subtyping
  - compiler will compile straight through to native code on UNIX machines
    using "cc -O" (or user specified compiler/flags)
    option 'c-only will skip this last compilation step. (that option is
    the default on macintosh & windows machines)  
  - reduces needless nested ifs in generated code
    [VM change] (if X (return ...) Y) ==> (if X (return ...)), Y
    This optimization drastically reduces the nesting of ifs (one example 
    from 27 to 3), decreases c-code size by ~20% and seems to makes the
    compiler's job much easier.
  - Tail-calls to functions which have an empty environment omit setting
    the environment register.  env register setting moved to reduce
    register pressure in function prologue
bugs:
  - fixed some nasty bugs in code generated for mutable variables

Version 3 [Sep 26 1996]
---------
improvements:
  - compile through to native code on Windows machines with Visual C++ 
    installed
  - added # of slots used to the tail_buffer init stage.  This is for
    a possible GC optimization in the underlying implementation
  - uses the new Zodiac (now M3)
  - scheme_initialize now returns the last value(s) in the file
  - let-values supported
bugs:
  - fixed define-struct bug
  - fixed variable arity bug
known problems:
  - set! of undefined variables always allowed

[Version 3.5 released in October and revised in November on temporary basis 
 with some features of 3.6]

Version 3.6 [Jan 3 1997]
---------
improvements:
 - internal documentation written
 - '-stupid' flag added to allow known errors to be delayed until at 
   runtime, like wrong # of args to primitives, known functions, etc this 
   way (if #f (car) 5) --> 5 rather than a compile-time error.
 - '-prim' flag added -- assumes primitives for top-level bindings who would 
   be primitives in units.  Sped up application of known primitives
 - top-level #%... always optimized to primitive reference
 - rudimentary source correlation all the way to VM code, allowing source 
   correlation for errors caught by the vm optimizer
 - Windows compilation & linking now directed by compiler specific batch 
   files which live in %PLTHOME%\compiler\%PLT_COMPILER_LIB%\.  
   PLT_COMPILER_LIB follows the directory structure of mzscheme's lib 
   directory.  eg win32\i386\msvc.
 - added rudimentary 'safety net' to the prephase to catch possible 
   unsupported syntax and redefinition of primitives (important when in 
   -prim mode)
 - Return arity check made explicit -- primitive calls are never checked.
 - Uses new Zodiac version: allows all values constructs, adds struct, does 
   not implement classes, units, begin0, or case-lambda
bugs:
 - fixed call/cc+let bug -- boxes in let expressions are made at the correct 
   time
 - other minor fixes

Version 3.7 [Jan 7 1997]
-----------
improvements:
 - multiple function vehicles implemented -- vehicles:monolithic (with user
   defined number of vehicles/monoliths) and vehicles:functions; 
   vehicles:units to be implemented with units (!) Vehicles are assigned 
   to functions in a separate pass over all functions.  # of monoliths 
   specified with -M.  One vehicle per function by -vf.  One vehicle per
   unit by -vu.
 - delay supported by virtue of improved Zodiac + MzScheme functionality
 - safety net updated

Version 3.75 [Feb 16 1997]
------------
improvements:
 - internal handling of defines changed to be compatible with Spidey. 
   Intermediate languages now contain only top-level defines
 - vehicles have distinct max-arity & max-args
 - execution units now handled more uniformly internally
 - uses Zodiac's scheme-expand-program in order to handle units
 - uses new orthogonal annotation capabilities in Zodiac - eases complexity
 - uses new zodiac:void and zodiac:undefined constants for compatibility 
   with Spidey

Version 3.76 [Feb 19 1997]
-----------
improvements:
 - static propagation improved -- (let* ([x 5] [y x]) y) --> 5
 - internals use case-lambda, though full-fledged ones still not
   supported (done for Spidey compatibility)
 - uses zodiac version in the PLTHOME directory rather than a 
   private copy
bug fixes:
 - literal boxes allowed (#&...) [oops!]


Version 3.77 [Mar 28 1997]
------------
improvements:
 - defines allowed anywhere zodiac lets you put them
 - begin0 supported
 - prephase optimizes begins [more friendly to macros]
   eg (begin (lambda () p) x) --> x
      (begin (begin{0} a b) c) --> (begin a b c)
      (begin0 1 a b) --> (begin a b 1)
 
Version 3.78 [Aug 11 1997]
-----------
improvements:
 - relevant portions of mzscheme test suite compile to C
   execution still sketchy, perhaps because of mzscheme bugs
 - internal representation of begin now n-ary instead of binary. no speed
   improvement seen
 - files for MSVC 5 written
 - Win32 command line 'mzc' written (in C)

bug fixes:
 - (letrec-values ([() ...]) ...) compiles correctly
 - (define-values () ...) compiles correctly
 - number constants compile correctly (complex, NaN, etc. were weird)

Version 3.79
------------
bugs:
 - rely on altered version of Zodiac invoke.ss (unitizing will fix)
   (define check-syntax-level 'advanced)