[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

new release

Release 1.1 of Self is now available.  Below is a list of changes and
enhancements that have been made since the last release (1.0).  Only
the major changes are included.  In addition to the changes listed,
many small changes have been made and all known bugs have been fixed.

- The programming primitives have been cleaned up.  _DefineSlots: has
  been removed and two new primitives introduced instead:
  _AddSlotsIfAbsent: and _Define: (see section I-5.6).

- Two compilers are now distributed with the system (see section

- The virtual machine now supports lightweight processes through a set
  of primitive methods (see Table 16 in Appendix F of the Self System

- Byte and object vectors can now have user-defined slots.  

- The representation of strings has been changed.  

- Compiled code space has been divided into four areas whose sizes can
  be individually set with environment variables (see Appendix E of the
  Self System Manual).

The first of these changes is probably the most visible since it
affects almost every source file.  The manual contains an expanded
section on how to use the programming primitives.  See below for an
example of the differences in use  between _DefineSlots: and _Define:.


The manual has been updated and expanded; the collection of papers has
been reformatted, and some of the papers have been edited (but are
essentially the same as in release 1.0).  All manual sections and
papers are now available as separate PostScript files (see the README
file in /pub).


/pub now contains a contrib directory for contributions by Self users;
feel free to put your goodies there, but please observe the guidelines
in README-contrib.


Release 1.1 is available free of charge under the same conditions as
the previous release; you need not sign a new license if you have signed
one for the original release.

Source code

The virtual machine source code for release 1.1 will be available shortly
for academic use.  You will probably have to sign a slightly more legalese
license agreement (we are currently sorting things out with Stanford's
Office of Technology Licensing).  We will announce details on this as
soon as possible.

Converting from _DefineSlots: to _Define:

_Define: and _AddSlotsIfAbsent: are a pair of programming primitives that
replace the _DefineSlots: of the original release, and they are used a
little differently.  Section 5.6 of the Self System Manual describes the
new programming primitives thoroughly.

A short example will illustrate the idiomatic use of _Define: and
_AddSlotsIfAbsent:.  The example defines an object that holds shared
behavior for points, point traits.

In the original release, this would have been accomplished by:

  traits _DefineSlots: ( |
      point = ( |
          parent* = traits pair.
          printString = ( x printString, '@', y printString ).
          + pt = ( (copy x: x + pt x) y: y + pt y ).
      | )
  | )

In the new release, the same object is defined by:

  traits _AddSlotsIfAbsent: ( | point = () | )
  traits point _Define: ( |
      parent* = traits pair.
      printString = ( x printString, '@', y printString ).
      + pt = ( (copy x: x + pt x) y: y + pt y ).
  | )