*** Squeak 6.0 Release Notes ***
We are happy to release the next version of Squeak shortly after its 25th anniversary. This is the first Squeak that supports high-resolution displays on all major platforms and offers a flexible UI scale factor through improved support for TrueType fonts. Bundled with the latest OSVM release, the image now uses the new SistaV1 bytecode set by default. We changed the image-format version so that older VMs will not crash on Sista-specific bytecodes. Furthermore, we made many improvements to our programming tools to provide a better programming experience for code writing, object inspection, and process debugging.
Please find below a detailed listing of all the changes, which includes notes on Major Deprecations, Known Issues, and Compatibility Notes at the bottom.
Detailed Improvements in Language, Tools, and the Environment
Kernel (up to Kernel-ct.1482)
- Switches the default bytecode set to SistaV1. This lays the basis for a new generation of VM optimizations (Sista: Speculative Inlining Smalltalk Architecture). With Sista, blocks are represented by CompiledBlocks and instantiated as FullBlockClosures, the stability of which has been improved in the course of this switch (fixed bugs in FullBlockClosure >> #= and InstructionStream >> #scanForInstructionSequence:). Provides new encoding accessors.
- Adds full support for read-only objects that is backed by a VM-side write barrier bit. If an attempt is made to manipulate a read-only object, a ModificationForbidden error will be signaled. Some objects are read-only by default.
- Numbers: Adds new testing selectors Number >> #hasLimitedPrecision and Float >> #isDenormal. Accelerates SmallInteger >> #highBit by connecting it to a new VM primitive. Adds utiliies for converting floats from/into IEEE representations. Fixes bugs in Complex arithmetics, Float >> #isPowerOfTwo, Float >> #log2, LargePositiveInteger >> #sqrt, and SmallInteger >> #sqrt.
- Simulation and debugging: Completion and fixes for the simulation of Objects as Methods, , and several bytecodes and primitives. Protects the simulation machinery against internal simulator errors which previously could blow up your image. Upgrades Context class >> #runSimulated: to a synchronous entry point into the simulator.
- Process management: Makes Process more robust against invalid instantiation and termination attempts. Revises #suspend to remember any semaphore or monitor that the receiver has been waiting for and restore the waiting state in #resume (the old behavior is available via #suspendAndUnblock). Fixes several bugs in reading the state of processes and terminating them. In particular, reinforces that all unwind () contexts will be executed during termination (which may include the top context of the process). Adds #terminateAggressively to skip all active unwind contexts. Fixes bugs in ProcessorScheduler >> #highestPriority: and ProcessorScheduler >> #anyProcessesAbove:. Improves convenience of Process >> #printString.
- Bugfixes and improved robustness during exception handling.
- BlockClosure: Adds #whileNil, revises return values of #whileNil: and #valueWithExit.
- Fixes some implementations of #copy.
- Work continues on streamlining ProtoObject and making it understand as few messages as possible.
- Switches identity forwarding to not copy the hash by default.
- Work continues on improving the compatibility of Promise with the Promise/A+ specification.
- Adds a #defaultBase: parameter to NumberParser.
- In #caseOf:otherwise:, adds support for unary otherwise blocks.
- Simplifies the compilation protocol on ClassDescription. Robustizes decompilation against syntax errors. Adds utility methods on SharedPool and on CompiledMethod.
- Adds a new preference for turning off logging of compilations to changes file.
- Revises some event sensor constants and fixes the timestamps of synthesized events.
- Work continues on decoupling Kernel from UI frameworks.
- Improves weak typing of collections for math functions.
- Softly deprecates #ifNotNilDo:, #ifNil:ifNotNilDo: and #ifNotNilDo:ifNil:; please switch to their pendants without 'Do'.
- Miscellaneous speed-ups (#cull:[cull:], Integer rounding) and clean-ups (ByteSetEncoder, ClassBuilder, source pointers, minor deprecations).
Collections (up to CollectionsTests-ct.377)
Chronology (up to Chronology-Core-ct.80)
Compiler (up to Compiler-mt.476)
Environments (up to Environments-ul.84)
Traits (up to Traits-eem.313)
- Minor optimizations to the compiler.
PackageInfo (up to PackageInfo-nice.74)
- Fixes inclusion test for packages against invalid method references.
Graphics (up to Graphics-ct.521)
- Major clean-up and improvements of fonts: Fixes several bugs related to font rendering, spacing, scaling, and text composition. Defaults all pre-rendered fonts to 96 ppi.
- Overhauls parsing of GIF files and fully aligns it to the GIF spec. Deprecates AnimatedGIFReadWriter, normal GIFReadWriter will treat all GIF images as a potential series of image frames.
- Improves and extends fallback mechanism for fonts and text styles.
- Extends AbstractFont interface with new accessors (#subfamilyName), converters (#asRegular, #larger, #smaller), and test selectors (#hasFixedWidth). Deprecates 'ascii' selectors in favor of modern 'codePoint' vocabulary.
- Adds public 'text composition' protocol on TextStyle.
- Improves display of multiple TextAnchors. Adds convenience selector Form >> #asTextAnchor.
- Adds Color class >> #named:, Color >> #veryMuchDarker, and improves the printString of translucent colors.
- Changes the object format of LayoutFrame to remove nil values from all fields. Adds convenience selector #fullFrame.
- Improves geometry convenience by adding Point >> #exactCenter:, Rectangle >> #pointAtFraction:, and Rectangle >> #randomPoint[:].
- Adds new preference to turn off form compression before saving the image.
- Provides new Form combination rules for alpha BitBlt composition.
- Performance enhancements to text rendering.
- Miscellaneous clean-ups, stability enhancements, and improved test coverage.
- Overall improvements to documentation.
Balloon (up to Balloon-mt.34)
TrueType (Fonts) (up to TrueType-mt.94)
- Enhancements and robustness improvements to font importing. Ignore hidden/cache files. Windows' symbol fonts work now correctly.
- Improves performance of text composition and rendering significantly. Extra speed-up for single-byte strings. Improves compression of pre-rendered fonts.
- Fixes several bugs related to font rendering, glyph clipping for scaled fonts, code-point ranges, and handling of fallback glyphs.
- Extends glyph accessing protocol on TTFontDescription. Moves extra gap/scale protocol from TTFontDescription up to TTCFont.
- Adds implementation of cmap format 12. For instance, this adds support for Unicode Cuneiform fonts.
- Make the cache size for TrueType glyphs a preference.
- General clean-ups and stability improvements.
Sound (up to Sound-mt.89)
Network (up to NetworkTests-pre.63)
- Improves support for IPv6 networking.
- Adds basic XML support for HTTP server directories.
- Allows unauthenticated SMTP logins without username.
- Implements equality comparison for URLs.
- Fixes parsing of mime documents.
- Improves error handling of connection errors. Miscellaneous stability improvements.
SqueakSSL (up to SqueakSSL-Tests-mt.26)
- SqueakSSL is not supported under Ubuntu 16.04 LTS.
WebClient (up to WebClient-Core-mt.130)
- Corrects handling of HTTP status codes (according to RFC 7230).
- Adds support for cookie field "SameSite".
- Fixes a syntax error in the encoding of multipart/form-data requests.
- Adds convenience method for JSON parsing.
- Overall optimizations, robustness enhancements, and improvements of the internal test coverage.
XML (up to XML-Parser-mt.46)
Files (up to Files-ct.193)
Compression (up to Compression-xw.63)
Regex (up to Regex-Tests-Core-mt.17)
- Adds full support for lookaround expressions (i.e., positive & negative lookaheads & lookbehinds).
- Fixes parsing of special characters in character sets and parsing of quantifiers of the form {<min>,}.
- Overall optimizations and stability improvements concerning parsing invalid expressions.
System (up to System-eem.1361)
- Levels up the command-line interface of Squeak which now supports do-its and a couple of other options. To get started, run squeak Squeak60.image -help in the command shell of your host system.
- Turns the demo/high-DPI mode into a flexible and refurbished scale factor and adds a low-ppi mode. The scale factor will automatically be detected based on the DPI density of your screen. Improves switching between UserInterfaceThemes, adds a #themePriority hook for updating targets, and makes it possible to set UI theme properties from a target. Adds a preference to adjust the default size of new windows. Tweaks default font sizes and colors of some themes.
- Extends SpaceTally with a parameter for limiting traversal depth through the object graph.
- Complements changes logging with timestamps for class changes and method removal. Adds queries to enumerate actual domain objects for changed classes or methods.
- Adds Unicode support for method preambles and timestamps.
- Extends method annotations for browsers with two additional requests for displaying the author and the package of a method.
- Makes the file-in mechanism compatible with Cuis package file-outs.
- Sensitizes SystemOrganizer to multiple environments and adds a hook in ToolSet to browse an environment.
- Adds queries in SystemNavigation to browse all extension methods for a package or all stores into a global variable.
- Adds a new ToolSet capability to browse a class comment.
- Adds a new AppRegistry to manage text stylers for different language syntaxes. Examples include the built-in SHTextStylerST80 and the MarkdownEditor (third-party).
- Refurbishes the "author initials" dialog to cross-check against the list of known contributors.
- Adds a parameter to TextDiffBuilder to make the order of insertions and removals configurable.
- About the system: Provides a set of queries for the status of Squeak's continuous integration builds. Adds Smalltalk interpreterVMMakerVersion for diagnostics.
- Cleans up preference categories, removes obsolete preferences, and increases the robustness of loading deprecated preferences. Stabilizes default values for historic preferences.
- Cleans up and stabilizes locale identification and switching. Adds an interface to determine the local timezone.
- Cleans up opening of the sources file and tunes well-known locations for finding the sources file.
- Removes manual line breaks from dialog texts and gives the responsibility to UI frameworks to compose the text.
- Lots of further clean-ups all over the package. Removes obsolete Abort class. Work continues on decoupling the System package from other packages such as Morphic and Etoys.
- Stability improvements. In particular, the robustness of the shutdown/startup cycle when closing and reopening the image is improved.
- Several bugfixes to ImageSegment deserialization, MailSender >> #userPassword, Smalltalk forceChangesToDisk, Smalltalk patchSystem, ThirtyTwoBitRegister, and many other protocols.
- Multiple speed-ups. In particular, the performance of fetching locale strings via #translated is improved drastically.
- Extends documentation.
Morphic (up to Morphic-ct.2006)
- Work continues on reconstructing Objectland (also known as "The Worlds of Squeak"), a colorful collection of examples demonstrating the multifarious capabilities of Squeak.
- Refurbishes font importer and font chooser tools. To the font importer, adds means to browse a font before installing it, uninstall an installed font again, and apply it as a default system font. To the font chooser, adds support for TrueType and not-yet-installed fonts.
- Reworks the mapping of keystrokes to virtual keys for better cross-platform consistency. Try them out interactively or browse the available preferences.
- Provides the new layout policy GridLayout as an extract and overhaul from PasteUpMorph.
- Provides and cleans up Morphic layers as a general concept that was previously only available for Worlds in Worlds. Try it out!
- Lets file-drag/drop events from the host system arrive as regular drag/drop events in the image and deprecates DropFilesEvent. You can now drag files from your operating system straight into a workspace or an inspector field!
- Adds support for dropping source-code artifacts into the world to spawn a new code editor.
- In the main docking bar, adds a new changes menu that provides fast access to recently edited methods. To the windows menu, adds a new "Find workspace…" item. To the tools menu, adds Squeak Inbox Talk (third-party) for engaging with the community from the image. Promotes our new issue tracker in the help menu. Makes the search bar honor the "reuse windows" preference.
- Makes text in dialog boxes interactive and wraps it automatically. Tweaks windows' menu buttons to act on mouseDown instead of mouseUp like the world menu.
- Fixes visual appearance and robustness of mini editors.
- Makes the result of print-its interactive - you can click the result to inspect it. This is configurable via a new preference.
- Cleans up configuration of text styles and fonts for text morphs. Adds new properties #plainTextOnly and #averageLineLength. Adds a preference to enable line wrap at visual border in browsers.
- Increase default spacing in lists. Classic appearance is still available through 'compact' preferences.
- Revises editor shortcuts for enclosing the selection with brackets and enables them by default. Brackets can be nested and unnested by typing multiple opening/closing brackets. Disables US-keyboard-specific shortcuts but preserves them via a preference.
- Revises editor shortcuts for styling the selection. Read up all shortcuts in the help.
- Maintains editor undo history after canceling (Cmd + L).
- Adds support for font changes in list items.
- Improves keyboard navigation by automatically setting the keyboard focus in newly opened windows. Clients can specify a custom default focus.
- Adds support for multiple cameras to WebCamMorph and upgrades the CameraInterface.
- Adds support for new window events #windowChangedScreen and #windowDeactivated. Makes the image-wide keyboard focus consistent with the current focus of the host window.
- Adds halo support for protruding submorphs if the preference "halo encloses full bounds" is enabled. Inverts that preference while holding the control key during halo invocation.
- Morph protocol: Adds the possibility to handle #ownerChanged through composition (instead of subclassing/overwriting). Adds observer protocol for handling scale factor changes. Revises the properties protocol to follow the return value semantics from collections. Provides #pointAtFraction: for convenience.
- To editors, adds support for new optional model hooks #evaluateExpression:requestor: and #debugExpression:requestor:.
- Refactors the global variables ActiveWorld, ActiveHand, and ActiveEvent. Clients shall now refer to Object >> #currentWorld, #currentHand, and #currentEvent instead.
- Adds a new preference category for accessibility-related settings.
- Miscellaneous clean-ups regarding PasteUpMorph, invocation of halos,
FrameRateMorph, and many other areas. - Fixes horizontal scrolling.
- Improves support for custom scale factors in various places (cursors, text carets, scroll bars, grips, …).
- Clean-ups and repairs the preference #disableDeferredUpdates and auto-configures it per platform.
- Various stability improvements regarding drag-and-drop behavior, hierarchical list rendering, windows and splitters, button menus, text editing, sketches, halos, the elements in the objects tool, the cmd+dot interrupt mechanism, canvases, and general layout concerns.
- Speed-ups for animated images, the camera interface, window menus, pluggable lists, morph resizing, and text composition.
- Improves overall test coverage and documentation.
Etoys (up to EToys-ct.477)
- Adds code-to-tile conversion that can be triggered from a script editor by choosing "show code textually" from the menu.
- Adds the new chess 960 game, a version of classical chess with random starting positions in home ranks, which also comes with a refurbished UI.
- Work continues on untangling Etoys from other packages by extracting stuff to the packages MorphicExtras, Protocols, and Connectors.
- Stability improvements to keep classical Etoys projects loadable.
- Fixes missing icons when the Etoys mode is not activated.
- Many bugfixes and stability improvements to the mines game, same game, MonthMorph, CalendarMorph, tiles layout, the MIDI keyboard piano, the SoundPlugin, and SyntaxMorph.
- Miscellaneous improvements to multilingual support, clean-ups, and deprecations.
ST80 (up to ST80Tests-mt.8)
- Work continues on improving convenience of the flexible scale factor.
- Adds inspect item to to the blue-button menu of windows.
- Fixes high CPU load during empty world, when opening menus, and while scrolling lists in MVC projects.
- Improves MVC compatibility for some tools such as the change set browser or the debugger.
- Miscellaneous clean-ups and stability improvements (inter alia, concerning home and key handling and auto-indenting in MVC text editors, and the "Force transcript updates to screen" preference).
GetText (up to GetText-mt.51)
Multilingual (up to Multilingual-mt.285)
Help (up to HelpSystem-Core-mt.140)
- Enhances the help browser with a tree menu to inspect/explore/browse help topics.
- Adds support for blurbs in custom help books.
- Moves up #priority to AbstractHelpTopic for ordering help topics.
- To the system reference of a class, adds superclasses as well.
- Updates tutorial on command key mappings.
- Improves information on VMs on the welcome page.
- Clean-ups and stability improvements regarding help-topic authoring and searching in the help browser.
Tools (up to Tools-mt.1163)
- Major overhaul of the inspector family: Provides richer and clearer extension points and offers new domain-specific specializations (among others, for bags, character sets, forms, morphs, and blocks). Allows adding custom fields to individual inspector instances through the yellow-button menu. Adds drag'n'drop support to the field list. Adds support for ProtoObjects such as proxies in the basic inspector.
- Revises display of numbers in the explorer.
- Enhances the dependency browser: Adds support for extension methods, shared pools, and applies further UX improvements. Makes it possible to explore upstream dependencies.
- Merges the browser's "find class" and "recent classes" menus.
- To the system category menu of browsers, adds a package submenu for browsing the package, its extensions, and its dependencies.
- To hierarchy browsers, adds support for traits. To the menu of a trait, adds an item for browsing all its users.
- Adds an option to scan the changes files for removed method versions.
- Revises the "save contents to file" mechanism of workspaces. Adds a preference for file workspace contents on accept.
- Adds a preference to embed a transcript in workspaces and another one to automatically declare variables in them.
- Makes code holders useful by themselves.
- Revives the classical change set browser.
- In the process browser, allows suspending UI processes.
- Improves confirmation dialogs before removing methods, classes, or system categories.
- Revises behavior of message traces for appending vs. detaching new implementors/senders.
- Adds queries for browsing all glyphs of a font or all method sources that contain Unicode characters.
- Minor UI improvements and speed-ups to the preference browser and the preference wizard.
- Revises "copy as html" menu item in browsers to honor the current text selection.
- Fixes TextLinks to the comment, definition, or hierarchy of a class.
- Improves the visibility of failing menu builders.
- Miscellaneous stability and UX improvements to all our beloved tools (including browsers, change lists, change sorters, debuggers/editing code from debuggers, the browse/debug button action feature, file lists, inspectors, explorers, message sets, process browsers, protocol browsers and lexicons, and the versions browsers).
- Several optimizations to method removal from message traces and to the debugger's "run to here" feature.
- Miscellaneous clean-ups, improvements to the test coverage, and enhancements of the documentation.
ToolBuilder (up to ToolBuilder-Morphic-mt.316)
SUnit (up to SUnit-ct.143)
Nebraska (up to Nebraska-mt.59)
Services (up to Services-Base-ct.72)
- Removes the "create new service" item from the method-list menu.
- Minor stability improvements to the services browser.
- Improved compatibility for MVC.
Shout (Syntax Highlighting) (up to ShoutCore-mt.93)
SystemReporter (up to SystemReporter-ct.61)
- Adds a new report about existing packages in the image.
- Adds a new report about locales in the image.
- Improves report on image fonts.
- Revises labels and display of VM parameters and includes several new flags and stats.
- Report preferred bytecode set in the image report.
- Minor stability improvements.
Installer (VersionNumber, UpdateStream, Squeak-Version) (up to Squeak-Version-mt.5368)
- Updates packages definitions for FFI.
- Fixes an issue with viewing changeset conflicts.
- Minor clean-ups, improvements to multilingual support, and documentation.
Monticello (up to MonticelloConfigurations-dtl.178)
- Adds MCConfigurationExtended as a tool for versioning Monticello configurations.
- Introduces URL rewrite rules in HTTP repositories and uses them to enforce HTTPS for the source.squeak.org server.
- Improves support for saving and loading traits and FFI structures.
- Honors custom environments while loading traits and scripts.
- Adds MCMcmUpdater >> #dependentPackages for convenience.
- Improves overall dialog convenience and multilingual support. Adds a new menu item in version dialogs for filtering out unchanged methods that only have a different timestamp.
- Shows the current CI status in the update dialog.
- Fixes the "reparent" button in version inspectors.
- Fixes wrong execution order of preamble and postload scripts during loading and unloading of packages.
- Miscellaneous stability improvements. Improves support for MVC.
- Miscellaneous speed-ups and clean-ups.
SqueakMap (up to SMLoader-ct.98)
- Minor clean-ups and deprecations.
Tests (up to Tests-mt.491)
- Adds overall test coverage. Improves robustness and eliminates side-effects of several tests.
- There are now over 5000 tests in this release that run in less than 3 minutes on our CI.
ReleaseBuilder (up to ReleaseBuilder-ct.235)
- Improves the reproducibility of the image state by resetting all pragma preferences to the default values specified in their declarations, and by resetting all old-style preference default values to their current values.
- Includes The Inbox and The Treated Inbox into the known Monticello repositories by default.
- Updates Unicode database when building a new image.
- Improves changelog generation.
- Minor UI improvements.
- Miscellaneous improvements to stability, multilingual support, and documentation.
Major Deprecations
Known Issues
Compatibility Notes
- SqueakSSL is not supported under Ubuntu 16.04 LTS.
- All code literals are read-only with the new bytecode set SistaV1. If you used to perform inline modifications such as 'hello' at: 1 put: $y or #(1 3 2) sort, you will need to copy the literal first. Brace expressions are not affected.
- Identity forwarding via #becomeForward: or #elementsForwardIdentityTo: does no longer copy the hash. Append copyHash: to the selector to override the default behavior.
- Tests that signal an unhandled warning will now be considered as errored, even if the warning does not raise a debugger.
- UIManager >> #chooseFrom* will no longer present the values as buttons. When requesting a choice from a small number of options, clients should migrate to the new UIManager >> #chooseOptionFrom* interface.
- Process >> #terminate will now consistently execute all unwind contexts which may include the top context of the process. This implies that in rare cases sending #terminate to a process will not interrupt the current control flow immediately.
- Process >> #suspend will no longer unblock a process that has been waiting for a semaphore or a mutex, but return to the blocked state after being #resumed. To manually unblock a process indeed, send #suspendAndUnblock instead.
- In SyntaxErrorNotification, #resume: was renamed to #retryWithNewSource: to clarify that the control flow will not just resume but compilation will be retried.
- #asMutator is back to preserve the well-known Smalltalk legacy and improve the backward compatibility for projects such as Seaside. However, new code should use #asSimpleSetter instead.
- The default value for #allowBlockArgumentAssignment is now enforced, which means disabled. Your project might have to enable this preference again if you want to assign to block arguments.
- Legacy US-layout-specific keyboard shortcuts for enclosing the selection with brackets have been disabled by default. They are still available through the Legacy keyboard shortcuts preference. For all default shortcuts, read the help.