CHANGES FROM 1.6.1 TO 1.6.2

o   Can load images produced by system with similar sizeof(long) but
    different endianness.

o   Class reference now includes a beautiful class hierarchy -- took two days
    to make it work with both Makeinfo and TeX.

o   DLD class always present (even if it is not functional). This prevents
    `undeclared variable' errors in code using DLD where it is not supported
    (they will have a run-time error instead).

o   DLD interface to libtool's libltdl.a

o   DLD tries to append sensed extensions to the passed filename

o   Fixed more bugs in the makefiles

o   Fixed parse error :-( on some systems in sysdep.c (I'm sorry for the
    problems that this caused to so many of you).

o   GNU make is not needed anymore

o   More logical and coherent policy to look for the image file. In 1.6.1 we
    chose a default path, and overridden it if an image was found in the
    current directory: the problem was that snapshots were *always* saved to
    the default path! Now, instead, we choose a path for the image directly.

o   Now uses the `missing' shell script if bison and makeinfo aren't found

o   Readline interface is enabled by default.

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

CHANGES FROM 1.6 TO 1.6.1

o   Fixed bug in the makefiles (install target)

o   GNU qsort is provided

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

CHANGES FROM 1.1.5 TO 1.6

The versioning scheme has changed - I didn't need three version numbers,
I even wonder when and if I'll change the first.

Also the mantainer has changed, from the great Steve Byrne to yours truly
Paolo Bonzini.

Changes to the VM:

o   Blocks are now real closures.  This had a lot of side effects.  For in-
    stance, context realization now happens only after a GC, making GCs
    much less common.

o   #==, #notNil and #isNil are optimized out by the bytecode interpreter.

o   Faster &&-based dispatch for GCC (to disable it, define USE_OLD_DISPATCH).

o   Interrupts and bytecode interpreting errors (`boolean instance required')
    now do callbacks to Smalltalk.

o   Methods that simply return a constant (i.e. ^6 or ^#(1 2 3) or ^nil) are
    now optimized like methods that return self or an instance variable.

o   More inlining in the C code.

o   More than 64 literals (16384) supported.

o   Open-coded relational operators (plus #isNil and #notNil) try to look
    for a jump bytecode immediately following them, and directly do that
    jump (only for GCC new dispatch)

o   Overflow detection in Integer primitives.

o   Sends to super are now handled outside sendMessage.

o   Support for weak objects.

o   Support for finalizable objects.

o   Support for readonly objects.

o   Support for breakpoints.

o   The GC code now does not analyze OOP slots which are surely free.  This
    change made it up to five times faster.

o   The GC code now skips unused (beyond the stack pointer) slots of a context
    object.

o   The instance spec is not implemented through slow bitfields anymore

o   The OOP table now has a free list (+200% speed with this!!).

o   The size of context is variable according to the complexity of its code

o   The symbol table is hashed better (the new hash is based on John Boyer's).

o   The VM has more error handling built in: this includes passing integers
    where real OOPs were expected, detecting wrong number of arguments
    passed to blocks, trapping negative sizes passed to #new:, etc.

o   #to:do:, #to:by:do:, #timesRepeat: and #yourself are optimized out by
    the bytecode compiler.



Other changes to the C code:

o   _ inside an identifier is now valid. Note that, in Squeak, _ always
    identifies the assignment operator, even in code like a_b, while GST
    allowed something like a:=b, but a_b was a syntax error. Use of _ inside
    identifiers is common in other Smalltalks to avoid namespace clashes for
    automatically generated code.

o   New command line switches -a (see below), -S and -Q.

o   New system to include user modules, works like this:
	./modules blox
	make
    To use it, model your Makefile.body and cfuncs.h after those in the
    blox or tcp directories. If you want to have many versions, proceed
    like this:
        ./modules blox;		make; mv gst blox/gst
        ./modules;		make; mv gst base_gst
        ./modules blox tcp;	make
    and you'll have blox/gst with only blox; base_gst with nothing; gst
    with blox and tcp.

o   Portability: now compiles under CygWin (Win32 GCC), HPUX and more.

o   Precise Win32 version of Delay.

o   Support for long GNU style options.

o   The compiled bytecodes are now ran through an optimizer that performs
    jump and peephole optimizations, and eliminates unreachable code.



Changes to the Smalltalk system (new classes, etc.):

o   Added ability to access the Smalltalk arguments through the new -a
    parameter. The C code never gets everything after the parameter
    including -a, while Smalltalk code can get it through the
    SystemDictionary>>#arguments method.

o   Added a thread-safe Transcript object which prints to stdout if the
    GUI is not loaded and which is used by #print, #printNl and companions.

o   Added binary dump of Smalltalk objects (class ObjectDumper).

o   Added endian-neutral binary I/O to FileStream through the new
    ByteStreams.

o   Added fast ByteStreams, specially crafted for ByteArrays, which can
    be used with ObjectDumper.

o   Added ContextPart (superclass of MethodContext and BlockContext).

o   Added DirectedMessage.

o   Added file-handling classes (File and Directory).

o   Added IdentitySets.  Also, most of the Set hierarchy has been
    refactored and rewritten for better speed and design.

o   Added LargeIntegers.  LargeInteger literals can't be used in Smalltalk
    code yet, though. 

o   Added optional automatic freeing of CObjects (through finalization)
    and automatic closing of FileStreams.

o   Added RunArrays.

o   Added three subclasses of CObject: CSmalltalk, CInt, CUInt (and
    analogous messages to the Memory class).

o   Added useful functionality to Date.

o   Added ValueAdaptors.

o   #allInstances now returns a weak object, thus avoiding that a call
    to it forces GST to keep lots of unused objects in the heap.

o   A lot of messages have been added to most classes.

o   An implementation of a great idea by Andreas Klimas: a packaging system
    which automatically handles prerequisites and tests availability of C
    call-outs.

o   ByteArrays now support accessing shorts, longs, ints, etc.

o   CObjects are now variable word classes (try 'stdout store' in 1.1.5!!)

o   Code for mutating existing class has been merged from the BLOX directory.

o   DLD (dynamic loading of C modules) is now a `first class' package, included
    in the image wherever it is available. Architectures supported (besides
    GNU DLD, available in 1.1.5 too) include Linux (dlopen), HP/UX and Win32.

o   FileStreams detect when they have been closed and refuse to do any more o-
    perations - this shields Smalltalk programs from C's quirks and bugs.

o   Fixed millisecondClock and secondClock to use correct Blue Book semantics.

o   Float is now a variable byte class.

o   Float now handles NaN and infinity values correctly.

o   Some fixes to Point and Rectangle.

o   Many fixes in PositionableStream.  For example, #upToAll: and #skipToAll:.
    now don't seek back in the stream, and hence are usable with stdin.

o   Methods are not `special' objects anymore

o   Most of the Smalltalk code is now commented.

o   Removed LookupKey.

o   Support for class-instance variables (at last!).

o   Support for class declarations like "nil subclass: #XXX ..." (at last!).

o   Support for fixed instance variables in non-pointer classes

o   Support for the almost standard message #copyEmpty: (with the colon!).

o   System classes now have a category.

o   The kernel now uses := (even though of course _ is still supported).

o   The Smalltalk-in-Smalltalk compiler, even though is slow, works quite well
    and supports #[1 2 3 4] ByteArray and LargeInteger literals.  Bug reports
    for the compiler are MUCH appreciated!!  Please include code that is as
    short as possible.



Minor changes to Smalltalk code which make it faster:

o   Added #zero and #unity in Number.

o   #asSortedCollection: now uses quicksort.

o   SortedCollection now uses binary search in #indexOf:.

o   The results of most character operations are now precalculated.

o   WriteStreams now double the size of the collection they stream on when
    there's no more space.


Changes to BLOX and the GUI:

o   Added a Transcript window.  Also, the Smalltalk menu is now part of every
    window.

o   Added support for standard color selection and file selection dialogs.

o   BLOX now has a comprehensive test suite.

o   Completely rewritten, 99% Smalltalk code now, working across different
    platforms because it relies on Tcl/Tk, with advanced Tk features such as:
    - X11 color names.  Also, colors can now be passed with
      strings like '#0080FF' or '#1234789ADEF0' ('#RRRRGGGGBBBB').
    - event handling (including focus in/out, mouse enter/leave, key
      press/release, button press/drag/release/double click/triple click)
    - a much better text widget, with support for text with different
      attributes in the same widget
    - a new canvas widget for vector graphics - will somebody ever contribute a
      nice Asteroids for GST???

o   The Class Hierarchy Browser shows classes not derived from Object.

o   The hierarchy for the BLOX toolkit is better designed (I was forced to do
    that: since I'm using Smalltalk code, if I had not done it I would have had
    lots of duplicated pieces of code).

o   The new GUI system is not 100% compatible with the old one, partly because
    it now uses Tk and partly because of a few design decisions that were, to
    say the least, questionable.  Check your old code where it sets the
    geometry and where it passes the gui CObject to a method (in this case,
    just remove the first parameter).
