July 2013

Cuis Smalltalk Release Notes

Cuis is a free Smalltalk-80 environment originally derived from Squeak (www.squeak.org). Main project web (and downloads) at www.cuis-smalltalk.org

New in Cuis 4.2 (released July 25, 2013)

  • Packages now have dependencies

  • Package loading greatly enhanced

  • Moved non-essential stuff to optional packages. Cuis is now below 500 classes and 100kLOC. Reduction was about 25%

  • Many bugfixes, and minor enhancements and cleanup

New in Cuis 4.1 (released December 12, 2012)

  • Deep Morphic refactoring:

    • - New Morph Hierarchy: Less state and behavior at class Morph. Simple Morphs can be made simpler.
    • - All Coordinates are relative to owner.
    • - All Coordinates are Float.
    • - No globals.
    • - MatrixTransform2x3 is used as Morph location.
    • - Removed 'bounds' and 'fullBounds' ivars.
    • - Lots of additional cleanup.
    • - Paves the way for Morphic 3: Scalable Vector Graphics everywhere.
  • Improvements to Themes (by Casey Ransberger).

  • All open issues in GitHub are fixed.

  • Improvements to MessageTally, ProcessBrowser, CPUWatcher.

  • Underscore in identifiers enabled by default.

  • Many bugfixes, some of them from Squeak.

New in Cuis 4.0 (released April 21, 2012)

It is important to note that almost all the work done in this release was done in close collaboration with Bernhard Pieber and Software Generation. Bernhard and his company provided financial support, but also (and maybe even more important) provided many ideas, requirements and productive (and fun) discussions. Thanks Bernhard, it is great to work with you!

  • New handling of ChangeSets. The idea is to have only one "live" change set that automatically captures all changes done to the Cuis Core image. Changes to Packages go to separate ChangeSets.

  • UCompletion. A new implementation of Autocompletion for Smalltalk code. Activates with ctrl-space. Usually gives the selector desired as the first option. Some features are:

  • Sorts by last definition of selector (Methods recently saved go first),
  • Sorts appropriately all selectors matching entered prefix (no hardcoded limits, like 40 selectors matching 2 letters).
  • Restricts suggestions if receiver is Global, a Constant or a pseudo-variable.
  • Doesn't have an "expanded mode". Always shows relevant suggestions.
  • Not restricted to a set of previously selected packages. All the methods in the system are accounted for.
  • Very fast, thanks to an optimized Trie implementation.
  • Compact code. Relies on services by Trie (for storing and querying selectors) and Shout (for parsing incomplete methods).
  • Helps make Shout faster, by providing super fast queries of selector prefixes.
  • Can be used for other applications besides Smalltalk code. Currently used for an English glossary for StyledTextEditor.
  • Trie. Cuis 4.- includes a very optimized implementation of a Trie. Tries are dictionaries where keys are Strings. Lookups are extremely fast. Search for entries matching a prefix are extremely fast (O(1) regardless of the size of the collection). Addition and removals are quite fast too. Used for UCompletion, holding 11,000 selectors. Also used for an English spell checker (in the StyledTextEditor project) holding 166,000 words. In both cases use of memory is quite reasonable (3 and 5.4 bytes per character in average) and query speed is extremely fast.

  • Multiple level undo / redo in all text and code editors.

  • ClickNHalf+Drag to select words. TripleClick or DoubleClickNHalf+Drag to select paragraphs. Like most modern text editors and wordprocessors do.

  • Multiple text selection (with control+mouse). Like most modern text editors and wordprocessors do.

  • Lf. The newline character is no longer Character cr (ASCII code 13), but Character lf (ASCII code 10). This is the standard in Mac and Unix platforms, and the required convention for GitHub. All the code in the image has been converted.

  • cmd-w closes window below mouse pointer. cmd-< and cmd-> cycle through windows.

  • New "PostIt" like HoverHelp morphs.

  • Simplification / Redesign: Scrolling in Morphic (TransformMorph gone, etc).

  • Deep cleanup in Paragraph and paragraph display services in Canvas and DisplayScanner (now MorphicScanner).

  • MouseClickState refactor, to ease new gestures (ClickNHalf+Drag, DoubleClickNHalf+Drag, TripleClick).

  • Killed AbstractEvent hierarchy. Unified event subscribing, triggering and handling everywhere in Cuis.

  • Additional TextMorph cleanup.

  • Numeric enhancements done by nice and jmv, both on Squeak and Cuis.

  • Many minor enhancements, cleanups and bugfixes.

  • Updates to Squeak: Numerics, Network, and many others.

New in Cuis 3.3 (releaded June 2, 2011)

  • New nice Icon set from Tango (by Casey Ransberger)

  • Most menu options have now a nice icon
  • ContentPack - A clean solution for a problem Squeak had for over a decade! (by Casey Ransberger)

  • Manages internal/external resources
  • Allows import / export to enable use of use existing stuff and external tools
  • Does not depend on external files for image update
  • Updates done with code (enabling change sets of Monticello packages)
  • Avoids cruft accumulation, code for resources is removed after update
  • Taskbar for better access to minimized windows (by Casey Ransberger)

  • Multiple selection on text morphs (Thanks Bernhard Pieber and Software Generation!)

  • Use ctrl + mouse for multiple selection
  • Do 'Preferences disable: #commandClickOpensHalo' to enable the standard Mac gesture for multi-selection
  • Enhanced senders view: all occurrences of sent message are highlighted
  • Cosmetic tweaks in menus and Themes

  • NewTranscript fixes and enhancements (right click menu)

  • Morphic Windows hierarchy, builds and handles UI and menus; handles keystrokes

  • Big step for View / Model separation
  • Models are now GUI agnostic: they have 25% less methods and no references to Morphs
  • Eases having alternate GUI frameworks such as Morphic 3
  • Object level events cleanup

  • Gone is Model and the DependentsFields classVar in Object
  • Only object event system mechanism is #when:send:to:, provided by ActiveModel
  • Deep Models cleanup

  • Big cleanup of copy and friends.

  • #deepCopy eliminated
  • #veryDeepCopy, DeepCopier, #veryDeepInner:, #veryDeepFixupWith: eliminated.
  • Use of ReferenceStream for copying object graphs such as Morphs
  • Editor tweaks and enhancements. Code simplification, removed several ivars

  • New image shrinking tools: #reduceCuis for building reduced images

  • Support for gigabyte changes and sources files

  • Many minor Morphic fixes

  • BlockClosure>>#isClean, BlockClosure serialization (for clean blocks), enabling use of ReferenceStream for copying objects

  • Morphic cleanup. Morph selectors size reduced by 17%, several ivars removed, code simplified.

  • Cleanup in Object and other basic classes. Object selectos size reduced by 10%

  • FileList refactor

New in Cuis 3.2 (released April 12, 2011)

  • Enhanced look for menus and several other widgets
  • TIFFReader (100% Smalltalk code)
  • Many fixes and code enhancements and cleanup, especially in Morphic (World, Canvas, DamageRecorder, etc)
  • Text / TextAttribute cleanup

New in Cuis 3.1 (released March 4, 2011)

  • Super fast Morphic world display.
  •     About ten times faster when many windows are open.
  •     Makes the whole UI feel much more responsive.
  •     Simpler code
  • Layout engine.
  •     New layout specs and logic.
  •     New layout adjusters and window resizers.
  •     Allows adding / removing morphs without leaving "holes".
  •     Orders of magnitude simpler. Can be understood by humans. Removed all traces of the old code.
  • Cleaner look for Default theme. Nicer buttons, menus and halos. Faster world redraw allows for full-window resize.
  • Morphic buttons simplification: reduced 5 morphic button classes into just one.
  • New Transcript
    •     Fast (Calls return quickly)
    •     Fast (Updates are immediate)
    •     Thread safe
    •     Can log to file in addition to Display
    •     Display output is optional (for headless images)
    •     Can work on a bare bones image (Doesn't need UI, dependency, events, processes)
    •     Optional morphic window for seamless integration in Morphic
    •     UI framework agnostic. Can be used to debug Morphic, even with the morphic window open, without crashing the image!
    •     No longer a text editor. Display is read only.
  • Cleaner Clipboard design & api, to enable extended clipboard
  • Support for .mcz files (they are treated as .cs and .st files)
  • Removed the colored mouse button naming from all over the system. Now they are #mouseButton1, #mouseButton2 and #mouseButton3.
  • Fixes to transparent pixels in 32bpp Forms
  • Lots of code simplifications all over the system: Text, Menus, Tools layout construction, SystemWindow. Killed FakeClassPool.
  • Utilities: #printStack:, better comment at Object>>#is:
  • Many updates from Squeak, including cascading of optimized sends

New in Cuis 3.0 (released January 14, 2011)

  • New Look!
  •     Themes. Several themes included, plus, you can add your own.
  •     A nice default theme, using gradientes, rounded corners, anti-aliasing, nicer buttons, embossed labels, desktop background.
  •     Anti-aliased halos
  •     Window icons (taken from Squeak)
  •     New, friendlier Shout color specs
  • New TextMorphs
  •     Real view - model separation
  •     Removed StringHolder
  •     Text model holds current text + optional text provider (for accept / cancel)
  •     Simpler code, easier to extend.
  • Enhancements to:
    •     Color
    •     Layouts
    •     Misc minor tweaks and fixes
  • Many fixes and enhancements from Squeak

New in Cuis 2.9 (released November 5, 2010)

  • Fixes keyboard navigation in Windows and Linux (alt + arrow keys) and Mac (control + command + arrows keys)
  • Shout: fix line breaks in comments in styled code

New in Cuis 2.8 (released November 4, 2010)

  • Fixes to Character sorting and testing methods, to honor ISO-8859-15 encoding
  • Better conversion to/from UTF-8
  • Faster startup (forked DateAndTime class>>startup)
  • Honor quit signals from the OS (from Squeak)
  • #findBinary:do:ifNone: and #findBinaryIndex:do:ifNone: in SequenceableCollection
  • PointerTracingTools by Matthew Fulmer
  • Many recent tweaks from Squeak
  • Tweaks to blinking cursors
  • Tweaks to LayoutSpecs and PluggableMorphs
  • Tweaks to Editors

New in Cuis 2.7 (released September 3, 2010)

  • Morphic. New LayoutSpec mechanism. Simpler and nicer.
  • Morphic Simplification: Layout, Extensions, etc
  • Various fixes to the Text subsystem (Empty lines, Clipboard, Blinking Cursor)
  • Compiler / Decompiler / Debugger update to Squeak's
  • Numerics update to Squeak's (thanks Nicolas!), including tests. Misc additional tweaks and enh
  • Various fixes and enh to FileList (ascending/descending sort, formatting of columns, hiding hidden files)
  • Enhancements to PrettyPrint. PrettyPrinted code looks much better now.
  • Fixes to MessageNames, senders of specialSelectors (#ifNil, etc)
  • Style enh. Cleaning of 'asSortedCollection sort', etc.
  • Updates and Enhancements from Squeak (Inspectors, SocketStream, Socket, Zip, Rectangle, Duration, Time)
  • Minor tweaks from Squeak
  • Better handling of EndiannessCache (could be great for Squeak too)

New in Cuis 2.6 (released August 10, 2010)

  • Loaded BlockContext code again. Still needed for debugging.
  • Tweaks to decompiler, to avoid test failures.
  • Tests updates from Squeak
  • FFT now uses the fast primitive by default
  • A few updates from Squeak
  • Several minor fixes and enhancements

New in Cuis 2.5 (released August 9, 2010)

  • Compatibility with the Cog VM
  • Fix the sequence of click - wait - double click in text editors (old Squeak bug)
  • Fix formatting bugs in a trailing empty line in text editors (old Squeak bug)
  • A few updates from Squeak
  • Several minor fixes and enhancements

New in Cuis 2.4 (released June 17, 2010)

  • Adaptive Morphic CPU usage. Saves a lot of CPU on servers running many images.
  • Compiler update with Eliot's fixes
  • Configurable underscore meaning (from Squeak)
  • Enable / disable Shout in Workspaces
  • Big speedup of BW PNG
  • Many minor fixes and cleanup

New in Cuis 2.3 (released March 23, 2010)

  • Fixes for internalized sources
  • Decompiler fixes by nice
  • Various code cosmetics fixes
  • Enhancements to prettyPrint by cmm
  • A fix to WeakRegistry by ul
  • Added BitBltTests to allow knowing if the VM is updated
  • A serious simplification of Morphic geometry, removing DisplayTransform
  • InteractiveErrorCorrection fixes by cao and jmv
  • Lots of minor fixes

New in Cuis 2.2 (released February 24, 2010)

  • Better default and min annotationPaneHeight
  • A fix for ScannerTest
  • Simplification of MessageTally
  • Removal of MethodFinder, ImageSegment, OldSocket, GIFReadWriter, LimitingLineStreamWrapper
  • Memory and code size savings in MenuIcon and MenuMorph
  • Minor fixes and enhancements to DifferenceFinder, Shout, Streams, #isXXX methods, CodeHolder, ByteArray, Semaphore
  • Removal of unused methods and forms

New in Cuis 2.1 (released February 12, 2010)

  • Support for the Unary numeral system, as suggested by Dan Ingalls here.
  • A new code differ that shows differences in words and not lines, by Leandro Caniglia
  • Closure measurements (based on work by Eliot Miranda) are shown in the annotation pane for any method
  • Removal of 43 isXXX methods, replaced by the general #is: method
  • Misc. fixes and enhancements from Squeak and/or Pharo

New in Cuis 2.0 (released January 4, 2010)

  • Cuis is now closure-enabled. Cuis is ready to run on the Cog VM (when available). Cuis 2.0 requires a closures-enabled VM to run.

Updates done to Cuis 1.0 (during 2009))

  • Code simplification
  • Performance enhancements
  • Look enhancements
  • Shout
  • Preferences to adapt the UI for PDAs and for very high resolution or big displays
  • Fixed may old Squeak bugs especially in the Text subsystem

Initial Release of Cuis 1.0 (March 27, 2009)

  • Aimed at Smalltalk developers and people learning about Smalltalk
  • Close to Smalltalk-80 and Dan Ingalls' ideas
  • Compatible with the latest Squeak VMs
  • MIT license (based on the work by Yoshiki Ohshima, from VPRI)
  • Evolution by removing unnecessary complexity, not adding it
  • Reduced Morphic
  • Removed applications and optional functionality
  • Includes a set of high quality, antialiased StrikeFonts
  • Backwards compatibility not important
  • Include code from the Squeak project (various versions, Mantis, squak-dev, etc)

What Cuis does includes and what it does not.

Cuis includes a basic Smalltalk-80 system, updated for the capabilities of contemporary hardware. The user interface is a derivative of the Morphic framework in Squeak, with a strong emphasis on modern look and feel,  simplification and performance.

Cuis does not include features that are either:

a) Optional in nature (i.e. application specific)

b) Too complex (i.e. their complexity outweighs their usefulness)

c) Not stable

For instance, Cuis also doesn't include Unicode support. The handling of Unicode characters and strings in Squeak falls in b (too complex), as the whole system is affected and c (not stable), as bugs are still arising, even after being used for many years. Besides, as the basic Character and String were not modified, but new classes for WideCharacter and WideString were introduced, we can also consider it falls under a (optional in nature).

Please not that stuff not included in Cuis doesn't mean it can't be added. We warmly welcome initiatives to port or write new optional packages for Cuis.



Cuis is distributed subject to the MIT License, as in http://www.opensource.org/licenses/mit-license.php . Any contribution submitted for incorporation into or for distribution with Cuis shall be presumed subject to the same license.

Portions of Cuis are:
Copyright (c) Xerox Corp. 1981, 1982
Copyright (c) Apple Computer, Inc. 1985-1996
Copyright (c) Contributors to Squeak and Cuis projects. 1997-2014

   2006-2014 Juan M. Vuletich