From: Matthew Flatt <mflatt@cs.utah.edu>
To: plt-scheme@fast.cs.utah.edu
Date: Fri, 16 Mar 2001 12:03:24 -0700 (MST)
Subject: 199.4

The v200-tagged code in CVS for MzScheme and MrEd is now version 199.4.
The main change is the new class system in MzLib’s "class.ss" library.

Over the last few years, we have experimented with a class system that
supports only "instance variables" in objects. Methods were implemented
as closure-valued instance variables. This approach has proven to be
too expensive for many applications, so we’ve decided to move to a more
conventional implementation of methods for space efficiency. Other
benefits of the new class system include keyword-based initialization
arguments and final methods.

Below is a brief description of the change. For details, consult the
temporary docs at

   http://www.cs.utah.edu/~mflatt/tmp/mzlib.pdf

Matthew

--------------------

   Classes now have fields and methods, and the form of a method
   definition is syntactically restricted (so that it can be
   implemented with a per-class procedure instead of a per-object
   procedure).

   Syntactically, the new `class’ form is substantially different from
   the old `class’ form. The new form is more consistent with the
   `unit’ and `module’ syntax, using `define’ for method and private
   field declarations.

   The "class100.ss" library in MzLib supplies a `class100’ form with a
   syntax similar to the old `class’ form, but with a semantics that
   matches the new `class’ form.

   To make old code work with the new class system:

      0. Require the "class.ss" and "class100.ss" libraries.

      1. Replace "class" with "class100" (and "class*" with
         "class100*", etc.).

      2. Replace "private" with "private-field".

      3. Loop until there are no more syntax errors:
         - Try to load the code
         - Read the error message (which provides a source location)
         - Fix the problem

   The `send’ form works as before, but there is no `ivar’ form.
   Field values are accessed through procedures constructed with
   `make-class-field-accessor’. See the MzLib documentation for
   details.

   The "class-old.ss" library in MzLib implements precisely the old
   MzScheme class syntax, but it cannot be used with MrEd classes.