NEWS FROM 1.7.4 TO 1.7.5

o   Abort compilation if a method turns out to be too complex for the
    bytecode set (e.g. if it jumps too far).  Previously, erroneous code
    was generated.

o   Fixed bug in LargeIntegers which broke gst on HP-UX (and possibly other
    OSes which load programs high in memory)

o   Fixed bug in parsing #( () ), where empty inner arrays were parsed to
    nils

o   Fixed crash in parsing #[]

o   Support LinuxPPC which loses on va_arg(..., char)


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

NEWS FROM 1.7.3 TO 1.7.4

o   Adopted GNU Free Documentation License

o   Fixed bogus errors on big-endian machines

o   Fixed a few (innocuous) typos

o   Fixed bug in configure (installing Blox under Unix did not work)

o   Fixed bug in redefining a class that had pool dictionaries (caused crash
    on first compile!)

o   TCP ignores SIGPIPE on writing to a socket

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

NEWS FROM 1.7.1 TO 1.7.3 (1.7.2 was retired because of a packaging problem)

o   Adopted Lesser General Public License

o   Fixed crash on sends to super from a block

o   Finally fixed the installer after years of struggle...

o   In C call-outs, ByteArrays passed as Strings are considered
    null-terminated, and Strings passed as ByteArrays are not.
    This allows more interoperability between ByteArrays and Strings;
    the choice of whether to truncate them to the first null is left
    to the library (which uses #defineCFunc:...), not to the user.

o   Time zone support

o   Various Delay-related bug fixes

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

NEWS FROM 1.7 TO 1.7.1

o   Fixed bug when left shifting -1

o   Fixed bug when returning from non-existent method context

o   Test suite was broken (`.ok' files were not updated)

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

NEWS FROM 1.6.2 TO 1.7

Changes to the VM:

o   #at: and #at:put: implementations don't retrieve the instance
    specification twice.

o   Growable object table (OOP table in Blue Book parlance) allows to
    use huge data structures -- not working yet... have to find a way
    to reserve memory without allocating it.

o   New structures for contexts and BlockClosure makes it possible to do
    things faster, creating BlockClosure objects at compilation time and
    simplifying the VM's job when blocks are particularly well-behaved
    (so called `clean' blocks).  Now there are four levels of block
    optimization:
    - inlining (always been there)
    - `clean' (no refs. to self, to instance variables, to temporaries
      that reside in outer contexts, no method returns)
    - `self-contained' (can reference self or instance variables)
    - `full' (can do everything)

o   Number of arguments is checked in #perform:...

o   More polite behavior -- when a Process object yields control, the
    virtual machine automatically goes to sleep for a millisecond to
    give more occasions to run to the other processes running on the
    operating system.

o   Blocks store their bytecodes in a separated CompiledBlock object.

o   The image no longer has to store all the pointers to the global OOPs
    (classes, symbols, Processor,...) Instead the program is able to
    rebuild the pointers after the image has been loaded. This should
    make the image format for future versions more stable.

o   The method header is cached together with the method OOP.

o   Using various dirty tricks increased the interpreter's speed; they
    include caching the number of the primitive which #at:/#at:put:/#size
    called last time, avoiding to retrieve instance specifications twice,
    and specially handling cases where execution is surely LIFO.

o   You can read and write 32-bit LargeIntegers (64-bit on Alphas) to word
    objects, to the Memory object and to C objects.



Other changes to the C code:

o   `configure' macros specific to GNU Smalltalk are split in several small
    .m4 files that are then automatically grouped in aclocal.m4

o   DLD interface to AIX

o   Floating point operations with infinity/NaN work fine with FreeBSD.

o   Full open-coding of control structures (including #whileTrue,
    #whileFalse, #repeat)

o   Maximum number of instance variables is now 262143 (ANSI mandates 65535)
    Not so useful anyway until we add bytecodes that access variables whose
    index exceeds 63...

o   New -K option to load file from the shared files path (useful for
    Load.st, for example).

o   Option parsing now more similar to getopt and getopt_long's (-- does not
    mean `standard input', but `no more options').

o   Parameter checking in callins from C to Smalltalk.

o   Support for ByteArrays in Smalltalk code, like #[1 2 3].
						    ^	  ^

o   Support for forward references through the Undeclared dictionary.

o   Support for large integers in Smalltalk code, like 16r800000000000.

o   Support for sharps inside array constants, like #(1 #(2 3) 4).
							^

o   Support for the [ :a :b || c d e | ... ] syntax.
			    ^^

o   Support for the #(1 2 3 #a #b #'cdef' 45) syntax for Symbols
			    ^^ ^^ ^^^^^^^

o   Support for the 1.0d32 and 1.0q254 ANSI syntaxes for Floats
		       ^	  ^

o   The parser uses GNU's winning obstacks to avoid memory leaks (important
    because large integers are passed to the parser into a structure that
    is created on the heap, and freeing it at the appropriate points was
    pretty hard).

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

o   Class TranscriptInterface changed its name to TextCollector

o   Easy to use weak collections are included in the basic image

o   File-outs without exclamation marks are readable from other Smalltalks
    too (that was a bug).  As for exclamation marks, please wait a bit more;
    I can do that only between two versions whose image files are compatible
    (otherwise I'd break all the code that you wrote...)

o   Methods know about the class to which they belongs and about their
    selector.

o   Mutation of existing instances is done with a trick that allows the
    original instances to preserve their original instance specification
    during the mutation process; the result is simpler and (I hope)
    more stable code.

o   Namespaces (yeah!)

o   New CharacterArray class (superclass of String) is a provision for
    multilingual support...

o   New LookupTable class -- behaves like Dictionary but it is represented
    as an IdentityDictionary; not in the Book but is quite standard

o   New MethodDictionary class avoids crashes caused by partially updated or
    inconsistent method dictionaries.

o   Printing `for the programmer' and printing `for the user' are separated.
    The former is accomplished by the familiar #printOn: and #printString
    family; the latter is accomplished by the new #display... family of
    methods.

o   Restored LookupKey now that I finally figured out what it was meant to do.

o   Small integers are now instances of SmallInteger (used to be Integer).


    
Changes to BLOX and the GUI:

Blox has undergone major improvements in this release.  Many more features of
Tk have been implemented, making it a lot more powerful especially in the
creation of mega-widgets.

o   BImage reads XPM files; some images are available as BImage class methods

o   BLabels do word wrapping.

o   Browsers support namespaces

o   Callbacks in BEdit controls.

o   Canvases handle child windows, images and scrolling

o   If possible, different short-cut letters are chosen for items in the same
    menu

o   Controls with two scroll bars look better; in addition the user can force
    scroll bars to appear and disappear on the fly (previously the widget code
    hard-coded their presence or absence). Finally, scroll bars are hidden auto-
    matically when they are not needed.

o   Images in a text widget

o   Many more methods for miscellaneous features (some interesting ones are
    Blox class>>#atMouse to get the widget under the mouse, #fontWidth:,
    #fontHeight: and Blox class>>#fonts to measure and enumerate fonts,
    Blox class>>#createColor:saturation:value: for HSV colors).

o   New BEventSet class to assign the same event handlers to many widgets

o   New (private) BPopupWindow class allows to create popup widget (drop-down
    lists and balloons, and lots of other possible uses!); it is easily used
    by sending #new to a widget class (a `should not implement' error was 
    issued in previous versions).

o   Some extended widgets are included in Blox as useful examples (progress bar,
    drop-down lists, balloon help).

o   Source more commented (but not enough yet...)

o   Syntax highlighting



New goodies:

o   Lisp and Prolog (!) interpreters by Aoki Atsushi & Nishihara Satoshi

o   HTML/XML parser and World Wide Web Consortium's Document Object Model

o   TCP/UDP layer

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

NEWS 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 where 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.

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

NEWS FROM 1.6 TO 1.6.1

o   Fixed bug in the makefiles (install target)

o   GNU qsort is provided

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

NEWS 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   Ctrl-C interrupts and bytecode interpreting errors (`boolean instance
    required') now do callbacks to Smalltalk.

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

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 so that sendMessage
    does not have to choose its behavior at run-time (it was testing a
    parameter that is always a constant).

o   Support for breakpoints.

o   Support for finalizable objects.

o   Support for readonly objects.

o   Support for weak objects.

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 OOP table now has a free list (+200% speed with this!!).

o   The size of context stacks depends on the complexity of its method's 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 switch -a: the C code never gets everything after -a,
    while Smalltalk code gets only those arguments that are past -a.

o   New command line switch -Q: produce absolutely no message.
 
o   New command line switch -S: automatically save a snapshot before exiting.

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; Smalltalk can get
    arguments that follow -a 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   Added #zero and #unity in Number; they make a few operations a bit
    faster if you override them in subclasses (it is not necessary though).

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   #asSortedCollection: now uses quicksort.

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   SortedCollection now uses binary search in #indexOf:, #occurrencesOf:
    and #add:.

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 results of most character operations are now precalculated.

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.

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 (since I'm now
    implementing it in Smalltalk, if I had not done it I would have had a lot
    of duplicated 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).
