# Release Notes

## Version 1.1.2

- Fixed inaccuracy in the type system intro in tour: private instance methods are visible from class methods and vice-versa, when using <Instance> and <Self class> types.

- Corrected longstanding documentation error on the history page that failed to credit Dan Ingalls for his work on the first attempt at a static type system for Smalltalk.

- Added AssocSet

## Version 1.1.1

(Dave Griswold) This release consists of just a couple of things that came up shortly after the first public release to address some issues people were having:

- A Benchmarking Guide has been added to the documentation to help people avoid some very common benchmarking traps.

- A bug is fixed in Dictionary>>at:put: that caused it to allocate an Association even when an entry already exists for the key. This was fixed a long time ago, but apparently the fix got lost. This speeds up replacing dictionary values by about 32%. It ought to be even faster- the code generator must not be producing good code for this for some reason.

- Support for file-ins in basic Squeak format is now supported. This is just for simple classes and methods, and has one big caveat: the class must not have a class comment. Primarily useful for moving benchmarks around. Classes in this format can be filed into VisualWorks, too, if you remove the 'stamp:' keywords on the method chunk headers.

## Version 1.1

This release consists of contributions from

- David Griswold - lots of different kind of cleanup work and enhancements:

  - Made it work on Windows XP. Command line arg handling was wrong, and lots of files were read-only that shouldn't have been. DON'T run in a compatibility mode, unless you are filing in my 1.1 deltas to 1.0, in which case you MUST:

    - First start the 1.0 system in Windows 95 compatibility mode.

    - File in my 1.1 code, and save the system

    - Exit, and turn off compatibility mode

    - make strongtalk.bst.bak writable (for some reason, compatibility mode cause it to be read-only)

  - Tons of library changes to get the core libraries back to (or closer to) being fully typesafe. More to do, especially the Stream and Visual hierarchies, which I had done a lot of work to clean up a long time ago but lost the changes, so I am too depressed about it to tackle it again right now. But at least the Collection, Number and many other critical "Blue Book" areas are quite close to being typesafe now (most of the remaining problems are bugs in the typechecker or in other people's code). I will do more on this.

  - Fixed an bug in the typechecker error display code caused by a postincrement that should have been a preincrement. This needs more looking at.

  - HTML Browser enhancements to make the System Tour work, including making it possible to view html documents edited (in some ways) using Outlook Express.

  - Wrote the System Tour and reorganized and extended the rest of the documentation.

  - Added filtering to the hierarchy browser. The API can do hierarchy filtering with an arbitrary predicate, and the UI has convenience interfaces for filtering on common library subsets, class comment substrings, or on subclasses of a class (which lets you nicely view a class' subhierarchy and its superclass chain at the same time), or combinations built up using AND operators. Filtering is used by the system tour to make it easy to view all the classes in a subsystem at once, regardless of where they are. Look on the context menu for subclasses as well as on the pulldown menus (they are different). Classes that don't match but that need to be shown because they have matching subclasses can be distinguished by a different font.

  - Added support for a source code save log, which makes rapid development a whole lot easier. To use it, create an empty text file in the source subdirectory called strongtalkSave.log, and it will accumulate saved source code changes, without any changes that haven't been saved. Not as good as projects, but a whole lot better than what we had before.

  - The system now keeps track of whether you have made source changes or not, and prompts you intelligently to save or not when you try to exit. %Bug: Doesn't work for the rare things that aren't reflected in the change log. Why isn't everything reflected there? You can also view all unsaved source changes made during a session (See "Browse/Unsaved Changes" in Launcher menu).

  - Changed the Transcript so it can show DoIt buttons for system restore after a session crash

  - Added mouse scrollwheel support

  - "implementers", "senders" and "messages" now open a browser directly if there is only one match.

  - Added Apply button to Definitions selection box, so you can quickly browse many matching classes.

  - Added prompt dialog for category name changes for safety.

  - added back the missing prims.src file (with many changes) so that primitives can be typechecked.

  - Ctrl-O (open definition) now only needs the cursor to be on the name of the definition in text- it will try to select the range itself.

  - Switched browser fonts to ones that work with ClearType technology in Windows XP. (makes fonts much higher resolution on LCD displays- try it!).

  - added a gross hack because the full garbage collection doesn't run automatically right now so that we don't run out of virtual memory while browsing, by running GC explicitly in the browser every time we load a page. I do it in a background process that waits 1/4 second after page loading so that it hopefully happens during think time.

  - When creating a new subclass in the prog. env. a browser for the new class is now automatically launched.

  - HTML Browser now supports <strong>. Also, headings can now contain <br>, images, links, and other phrase markup.

  - Quitting the system without saving changes now automatically reverts the source database, so that quitting after unsaved changes doesn't leave the source database in an inconsistent state (you are prompted to save if you want, and you can view the unsaved changes from the Browse menu if you want to save them some other way). The changes are still recorded in the change log no matter what.

  - Added a toolbar button to Class browers to spawn the superclass.

  - Ctrl-Shift-Enter is now a shortcut for accept & typecheck in TypedCodeViews.

  - Turned off smooth scrolling by default. This seems to reduce the frequency of the occasional hangs people have been having. You can turn it on again from the Launcher Dev menu.

  - TextViews now automatically resize by default. This makes the browsers work a lot cooler.

  - Fixed that nagging baseline alignment bug when imbedding category outliners in browser pages.

  - *Maybe fixed the hellish intermittent temporary hang in the system. Guessed it was some kind of deadlock on the semaphore protecting the event 'grab' stack, used by the region enter/leave managment logic, so disabled it by returning a new semaphore anytime anyone asks, and haven't had a hang since! Theoretically this opens a hole, but the monitor was only there for an obscure case that probably has never happened anyway (two processes asking for the event grab at the same time). Can try turning smooth scrolling on again now.

- Gilad Bracha and the rest of the team- A copy of the new paper on mixins has been included.

### Bugs/Limitations

- Fixed: one of the typechecker error display bugs -D.G.

- Fixed: Now works on Windows XP - D.G.

- The new dialog boxes I added to keep track of whether source changes have been made, only keep track of things that modify the change log. Other changes (specifically creation of a new category) aren't noticed, and don't by themselves cause the quit dialog to prompt you. I need to fix this at some point, although it is rare to just modify a category without modifying any method. -D.G.

- otherwise, same as 1.0

## Version 1.0

This is the original release from Sun Microsystems, Inc. Most of the work done internally at Sun to get this ready for release was done by Gilad Bracha and Robert Griesemer.

### Bugs/Limitations

#### System

- Doesn't work on Windows XP.

#### UI

- The HTML browser is very limited. It's main purpose is to demonstrate smapplets, and to allow active Smalltalk code to be integrated into the documentation. If what you see is messed up, or if you get crashes or complaints about unrecognized tags, try a real browser (or fix the bug!). In particular, don't expect to view PDF or run plugins or anything like that.
- Color support is ancient and ridiculous. Palette support had just been written, but not gotten working, when original work on the system stopped. So there are only the16 system colors right now (!). I hope to fix this at some point soon (D.G.)
- There's a known problem when outliners are opened all the way to the bottom, then closed and then redrawn. The layout can get messed up.
- Closing a browser (other than a text editor) that has unaccepted changes deep down inside doesn't warn you that you are about to lose the changes. There is a framework for fixing these sorts of issues, but it has never been completely applied.
- There is a known memory leak in the Browser caused by the fact that a dependency isn't released on closing, which causes accumulating dead dependencies in the dependency dictionary. Fixing it the right way might be pretty hard without weak pointers, although a hack might work.

#### Programming Environment

- moving a method between a public and private category doesn't always update the visibility of the method. As a workaround, just reaccept the method once you've moved it.
- Someone added an interesting 'meta' hack to easily inspect the Application for a window, but this crashes the system for some applications, such as workspace.
- Under some more unusual situations the reflective interface can corrupt the image, for example sometimes when changing the superclasses of all the subclasses of a class, then removing the original superclass. If the image becomes corrupted this way, you can fix it by filing out and then filing in all the affected code, which forces it to be rebuilt.

#### Type system

There are a variety of shortcomings and bugs in the typechecker, but here are some of the main ones you may encounter:

- Unions often don't work right. You may encounter error messages that say things like "[^Boolean | Boolean] is not a subtype of [^Boolean]"
- Sometimes the error messages are cryptic or apparently unrelated to the real problem. This is usually due to cascading errors.
- There are some error display bugs that may cause crashes.
- inherited types don't work right now.
- "typecheck world" in the launcher crashes right now.
- "typecheck all classes" in hierarchy browser doesn't produce the same results as typechecking all the classes individually right now; not sure which one is right. this needs to be fixed.

(c) 1994-1997 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
Use and distribution of this software is subject to the terms of the
source license.