These release notes are optimized for viewing inside Squeak, as they contain a lot of interactive examples. On this page, interactive links open in SqueakJS, which is a browser-based Smalltalk VM with some limitations. For the best experience, download Squeak and read the release notes there.
*** Squeak 6.1 "Vanessa" Release Notes ***
As Squeak approaches its 30th anniversary, we are proud to announce the next version of the system, Squeak 6.1. Some highlights of this release are:
- A new tree browser, which enables navigation through classes and categories using refurbished hierarchical morphs,
- The return of Objectland (also known as the "Worlds of Squeak"),
- Several changes and fixes for the kernel infrastructure for simulating, unwinding, and scheduling processes and reshaping classes,
- Miscellaneous improvements and additions to the toolset and user interface for inspecting, debugging, profiling, and versioning code.
Please find below a detailed listing of all the changes, which includes notes on Major Deprecations, Known Issues, and Compatibility Notes at the bottom.
About these release notes. Phew, what a release! Since the last release 4 years ago, we have merged 1700+ patches with 9000+ method changes. Beyond documenting technical changes in detail, these notes highlight the bigger picture and the overall impact of major developments. Along the way, you will find plenty of links to code pointers and interactive examples. Thus, these release notes serve not only as a changelog but also as a hands-on guide to exploring new features and mechanisms in Squeak. Click here to view an outline of this document.
In memory of Vanessa Freudenberg (1972-2025).
Detailed Improvements in Language, Tools, and the Environment
~~~ GUI Frameworks ~~~
Morphic (up to Morphic-ct.2218/MorphicTests-ct.97)
- Major overhaul of tree morphs:
- Improves colors and mouse and keyboard shortcuts for navigating trees.
- Revises type-to-filter similar to lists, highlights search terms, and enables searching single columns via [TAB]. Adds a configurable filter mode to search within the current selection, all visible nodes, or the entire tree.
- Introduces a recursive "find"/"find again" feature available via [CMD] + [F]/[CMD] + [G].
- Adds a flag for automatic expansion of trees.
- Improves support for drag'n'drop by automatically expanding nodes during dragging after one second of hovering.
- Miscellaneous stability and performance improvements for layouting, rendering, and event handling in trees.
- In the world, supports dropping of class references, system and method categories, and inspector and explorer fields to display them in a new window/widget.
- For mouse interactions, adds new preferences to customize the double-click time and drag thresholds.
- In the docking bar window menu, adds an item to collapse windows. Makes "find workspace" easier to use by expanding the selected window if collapsed. Reorders and decorates items in the help menu.
- Text editors:
- Underlines links (like this one!) during hovering and makes clicking and text selection through them more convenient.
- When enclosing/unenclosing a selection in single/double quotes, nested quotes are now automatically escaped/unescaped.
- Morphic API: Allows morphs to opt out of individual halo events and to specify a balloon text via a block instead of a selector.
- Menu construction:
- Adds new utilities for adding item groups and temporarily switching action targets during construction.
- #addList: now interprets backslashes in help tuples as line breaks.
- Automatically trims trailing lines between menu items.
- Revises the debug menus of several morphs by adding a time-profiler shortcut for buttons, providing access to the list and tree contents, and making existing "browse action" and "debug action" commands faster and more reliable.
- Honors the preference "Open Tools Attached to Mouse Cursor" in Morph>>openAsTool.
- Lots of UI tweaks and stability improvements:
- Improves theme support for progress bars, text morph menus, and dialog windows.
- Improves high-DPI support for buttons, scroll panes, sliders, menus, multi-selection lists, trees, drop-shadows, the scratch pad, the keyboard exerciser, and others.
- Improves multilingual support in different places.
- Fixes slips regarding the world display depth menu, clock configuration changes, search-bar print-its, project view morph styling, and transcript counting.
- Fixes an issue when profiling code where user events were swallowed.
- Several layouting fixes regarding proportional layouts, text morphs, scroll panes, and transformation morphs.
- Fixes rendering issues with transform morphs, polygons, multi-selection lists, and trees.
- Fixes scrolling in nested scroll panes.
- In text morphs, improves stability of text selection and tweaks indentation regarding empty and blank lines.
- Fixes "browse senders" of true, false, and nil, adds missing access to workspace bindings during accept-its, and improves robustness of editor history.
- Fixes bugs in construction of text containers and conversion of paragraphs to texts.
- In lists, fixes automatic selection before dragging an item.
- Fixes incorrect yellow-button menu invocation on buttons and lists.
- Fixes a bug during menu construction, which depended on uninitialized state.
- Fixes scaling of color forms.
- Fixes introspection of event handlers in morph meta-menus.
- Improves compatibility between old and new balloon morphs.
- Fixes a remarkable slip that (1) prevented collapsed windows from applying a new UI theme and (2) introduced a possibly significant memory leak of windows.
- Fixes an issue on macOS where calling the VM with additional command line arguments or plugging in external devices led to an incorrect "The VM is configured as a singleton application" warning.
- Improves stability and backward compatibility when loading morphs from files.
- Fixes cross-compatibility and concurrency issues with MVC.
- Improves reliability of halos.
- Improves performance of large tree widgets, transformation morphs, and animated GIFs.
- Miscellaneous clean-ups and documentation improvements for input events, editor attributes, and others.
MorphicExtras (up to MorphicExtras-ct.360)
- Introduces Objectland, which is a reconstruction of the famous "Worlds of Squeak" from 2003 and offers a colorful collection of examples that demonstrate the multifarious capabilities of Squeak. Re-adds the classic Etoys race car example and adds several new examples.
- After 18 years of spotless, clean Squeak, reintroduces and updates the famous BlobMorph.
- For webcams, adds a mirror option and extends interface for double-buffering. Improves UI and stability of webcam morph.
- Improves instrument menu of score players.
- Fixes the "preserve trash" preference and improves the robustness of the piano keyboard.
- Improves high-DPI support for the objects tool, several of its tools such as event recorders, score players, recording controls, and piano keyboards, and several EToys-related morphs.
Etoys (up to EToys-ct.532)
- Restores and revises a tutorial on painting and creating scripts in Etoys.
- Adds an undo button to FreeCell.
- Improves state indication in Tetris.
- Improves instrument menu of the midi input morph.
- Improves robustness of the players gallery, the spectrum analyzer, and the midi input morph. Fixes changing the heading of a player.
- Clean-ups and fixes for cards and stacks.
- Improves high-DPI support for Etoys icons, tile morphs and script editors, all games, the objects tool, the spectrum analyzer, file lists, watches, and calendars.
- Minor speedups for Kedama and players.
- Several clean-ups and refactorings that improve overall modularity and avoid unintended dependencies of other packages on Etoys.
ST80 (up to ST80-mt.311)
- Adds a close item to the world menu.
- Improves high-DPI support for system views.
- Adds View>>imageForm for taking a screenshot of a view and displays it in inspectors.
- Adds editor shortcut [CMD] + [SHIFT] + [D] for "debug it" (already exists in Morphic).
- Miscellaneous fixes and stability improvements:
- Ensures confirmation dialog before closing the current MVC project.
- Prevents unexpected author-initials dialog when opening the ST80 world menu for the first time.
- Avoids an issue with stale deferred actions in an empty MVC world, which caused emergency debuggers to appear only after pressing a mouse button.
- In text editors, fixes pretty-printing and spawning if no compatible model is available. Gently handles nil selection provided by the model. Fixes an issue with recently introduced keyboard shortcuts.
- Repairs folder choosers.
CommandLine (up to CommandLine-eem.27)
- Repairs the preference "Save snapshot of image on failure".
- Improves UIManager support for various file dialogs, font dialogs, confirmations, and requests.
- For interactive dialog requests, improves the error message before quitting.
~~~ Programming & Tools ~~~
Tools (up to Tools-mt.1366/ToolsTests-ct.137)
- Introduces a new tree browser, which displays system categories, classes, and message categories in hierarchical panes and integrates Monticello packages. There are also five new preferences for configuring its appearance.
- Reworks drag'n'drop for tree browsers and traditional browsers to support all meaningful combinations of panes for copying or moving classes, methods, and categories.
- Adds double-click support for hierarchy tree browsers to switch the central class. This is especially fun for multi-inheritance hierarchies with traits.
- In the class pane menu, adds new items for generating a new class or trait.
- In the message category menu, adds items to browse all [related] message categories in the system.
- In the annotation pane of class definitions, adds a shortcut for reading the full class comment.
- Simplifies extension point for custom browsers to register as hierarchy browsers.
- Improves multi-environment support for all kinds of browsers and message sets.
- In the Message Names tool, shows the definition, comment, and hierarchy for class results.
- Extends inspector support for custom fields:
- Allows objects to contribute custom inspector fields and menu items.
- Adds new meta (shift) menu to inspect fields or browse/debug their accessors.
- Adds InspectorField>>#printBlock: for customizing the representation of a field independently of its underlying (inspectable) value.
- When inspecting large collections, allows disabling truncation to show all elements.
- Makes inspection and debugging of transparent proxy objects and unhashable objects more reliable by avoiding sending them any messages, to which they might react slowly or catastrophically.
- Debuggers:
- Adds "send until…" command to precisely search for a condition in nested message sends.
- Improves "run to here" command to reach expressions in blocks.
- Improves error handling for invalid run until/send until expressions. For "return entered value", uses the proper evaluatorClass of the receiver.
- To the stack list menu, adds "select home" option for finding the home contexts of (possibly deeply nested) blocks.
- Makes the signaled exception and suspended process accessible in the debugger when no context frame is selected. Try it out!
- Adds a byteCodes mode to the debugger to view and step through the single VM instructions of a method (similar to the byteCodes mode in browsers). Adds a new "simulate" button to debug how Squeak's metacircular evaluator (aka context simulator) interprets the next bytecode. The new mode is reachable through the window menu > "what to show…", or, when extra debugger buttons are enabled, through the "source" button above the code pane.
- Miscellaneous clean-ups and improvements for customizing inspector classes.
- Welcomes AndreasSystemProfiler in the trunk, which was previously hosted in the VMMaker repository. Improves report format, robustness for tallying primitives, and documentation.
- In workspaces, adds a "load contents from file…" option to the window menu.
- Improvements to change recovery: Improves parsing of class definitions, method removals, recategorizations, and more. Adds and revises menu items to select all changes of a given type or filter for changes to the currently selected type or selector.
- Adds utilities Process>>#browse and Context>>#tempNamed:[put:].
- Adds file services for viewing compressed
cszandstzarchives. - In truncated file lists, inserts a link for reading the entire file.
- Improves layout of code-point browsers for single-byte text-converters.
- Miscellaneous UI improvements and bug fixes:
- Fixes for browsers:
- Fixes shortcut inconsistency in single-category browsers.
- Improves robustness in browsers when defining traits.
- Fixes a slip in hierarchy browsers that spawned a new redundant browser when redefining the selected class.
- Fixes package pane browser to actually use the package organizer instead of parsing the system category list. If no category is selected, shows all classes from the package.
- Deduplicates menus in package pane browsers.
- Fixes missing UI updates and class-side do-its in package pane browsers and dependency browsers.
- Fixes UI proportions and styling of class definitions and comments in file contents browsers.
- Consistently sorts classes in class list browsers.
- Fixes for message traces:
- Ensures consistent method labels in message traces.
- Improves robustness and dialogs for browsing senders/implementors.
- Minor UI string fixes.
- Fixes for message names:
- Fixes spawn ([CMD] + [O]) in message names.
- Improvements for versions browsers:
- Displays the stamp and category of the selected version, rather than always the current version's.
- When filing out a method, adds missing file extension.
- Fixes for change lists:
- Fixes change logging for methods that are recompiled from a browser without its existing category being selected.
- Improves robustness of recover changes scanning.
- Improves stability for "remove older method versions".
- Fixes for inspectors and explorers:
- Fixes inspecting of forms in non-native display depths.
- Fixes nested temporary variables when inspecting blocks.
- Fixes inspecting dictionaries with non-storable keys.
- Adds styling of thisContext in context inspectors in debuggers.
- Fixes shortcut for opening an Etoys viewer ([CMD] + [V]).
- Improves robustness when exchanging the inspected object in an inspector.
- Improves robustness of "copy expression" for a selected field.
- Fixes handling of unsaved changes in inspectors and explorers by using new #okToChange: hook.
- Harmonizes object explorer labels to match labels in the tree.
- Fixes for debugger:
- Fixes stepping through abort messages such as #mustBeBoolean and restarting from primitive methods that no longer fail, and updates window label accordingly. Improves tests.
- Fixes highlighting of next expression for to:do: statements and assignments.
- Fixes out-of-date context variables after restarting the top context.
- Fixes regression in runUntil when pressing shift.
- Fixes "return entered value" to properly detect unhandled errors during unwinding.
- When recompiling a method in a debugger, allows to proceed despite of no active home method. Fixes bug when recompilation is aborted.
- Improves stability and up-to-dateness of stack list.
- Miscellaneous clean-ups.
- Fixes for browsers:
- Speeds up process browser for managing very large lists of processes.
- Improves high-DPI support for system browsers and FileList2.
- Miscellaneous improvements of multilingual support.
- Significantly improves test coverage of tree browsers and debuggers.
ToolBuilder (up to ToolBuilder-Kernel-ct.176/ToolBuilder-Morphic-ct.370/ToolBuilder-MVC-mt.77/ToolBuilder-Tests-ct.9)
- Adds support for blocks in ToolBuilderSpec>>help: and PluggableMenuItemSpec>>action:.
- Improves compatibility between MenuMorphs, CustomMenus, and PluggableMenuSpec.
- Adds UIManager>>inform:title: for also providing a title.
- Adds UIManager>>chooseFileFrom:[…] for providing a start directory.
- Adds shorthands UIManager>>chooseFile and UIManager>>multiLineRequest:[initialAnswer:].
- For UIManager>>informUser(:d|D)uring:, provides optional access to the progress bar inside the provided block and properly returns the result of the block.
- Stops ignoring help texts for checkboxes and menu items.
- Morphic-specific changes:
- Improves convenience and stability of file selection dialogs. All kinds of file dialogs now contain an address bar. Improves handling of extensions, automatic selection by typing into address bar, and handles double-click on a file to confirm the dialog.
- In lists and trees, allows the model to decide whether it accepts a dropped object based on the hovered item.
- Adds new model-changed operations for trees to expand or update the labels of nodes. Forgives models that do not emit the current path for the current selection but fetches the new path automatically.
- For tree specs, adds a new filter mode and search mode.
- Fixes UI glitches when dynamically updating the children of windows and panels.
- Clean-ups and deduplications for trees.
- MVC-specific changes:
- Adds static support for children selector in panels analogously to windows (dynamic children updates in MVC are still not supported). Fixes a layout slip for zero children.
- In MVCToolBuilder>>open:label:, adds missing support for view and menu arguments.
- Fixes UI glitches when closing windows with scroll bars.
SUnit (up to SUnit-mt.153/SUnitGUI-mt.95/SUnitTools-mt.9/ToolBuilder-SUnit-pre.22)
- Indicates timeouts in TestResult and displays them in the test runner.
- Repairs the exclusion of classes via #classNamesNotUnderTest.
- Fixes test generation for #// selectors.
- Properly resets unexpected passes when rerunning failures in test runner.
Nebraska (up to Nebraska-ct.65)
- Adds support for mouse-wheel scrolling in remote terminals.
- Improves reliability of event handling for remote terminals, making it possible to freely move, resize, and rotate terminals in the client's world again.
- Fixes default port selection for Nebraska connections.
- Improves error handling for refused peer-to-peer connections.
Protocols (up to Protocols-ct.91)
- Improves high-DPI support for lexicons.
- Fixes and cleans up window titles of lexicons.
Services
- No changes.
Shout (Syntax Highlighting) (up to ShoutCore-ct.98/ShoutTests-eem.34)
- Styles comments in italics by default and provides a preference for this behavior.
- Fixes parsing of unary selectors beginning and/or ending with underscores.
~~~ Core Language ~~~
Kernel (up to Kernel-ct.1688/KernelTests-ct.482)
- Numbers:
- Adds new facilities Complex>>log, Integer>>bitInvert64, Integer>>timesCollect:, Number>>timesTwoPower:, and ScaledDecimal>>printFractionAsDecimal.
- Corrects behavior for #sin, #cos, and #tan for huge integers and fractions.
- Several fixes for number parsing (rounding of floats with large negative exponent and no fraction part; parsing of FORTRAN numbers).
- Various optimizations for integer bit manipulation, mixed int-float arithmetic (+ - *), float-to-fraction conversion, and trigonometric functions.
- Adds support for non-local exits with values through BlockClosure>>valueWithExitValue.
- Models: Allows unsaved changes checks to be scoped to particular views, making it easier in some tools to, for example, select a different list item or open a menu without needing to cancel changes in an editor.
- Debugging utilities: Adds #haltOnceIf: as a union of #haltOnce and #haltIf:. Makes ObjectTracer/ObjectViewer capable of proxying true/false.
- Debugging & simulation:
- Fixes various edge cases of the context simulator, which is used for stepping methods in the debugger. This improves the overall robustness and correctness when debugging the entire system from within itself. Concretely, we revised debugging of Objects as Methods and #mustBeBoolean, corrected simulation of a few SistaV1 instruction types, and fixed the simulation of various control primitives.
- Adds support for recursive process-faithful debugging, thus making it possible not only to debug a debugger but also to debug a debugger which is debugging a third debugger.
- Signals a new SimulationSideEffectWarning before simulating certain primitives to allow clients such as debuggers to control the scope of simulation.
- Fixes the debugger when stepping through a dead home context.
- Processes & scheduling:
- Improves and better documents process termination and stack unwinding for several edge cases, making repeated termination of halfway-unwound processes and debugging in concurrent settings more reliable. Improves stepping and closing a debugger while the debugged process is suspended, blocked, performing a non-local return, or even about to resume from a BlockCannotReturn exception.
- Prevents Process>>destroy from crashing the entire VM when sent to a blocked process.
- Fixes rescheduling after BlockClosure>>valueAt: and BlockClosure>>valueUnpreemptively by introducing a new primitive for Process>>priority:.
- For threaded VMs, adds Process>>isInExternalCode to test whether a primitive is running in the background.
- Makes it possible to reset a scheduled Delay.
- Promises:
- New helpers for combining promises such as #all:, #anyOne:, and #race:.
- Adds and revises accessors for awaiting and testing promises. Promise>>value is now a synonym of #wait; if the promise rejects, both no longer wrap the error into a BrokenPromise but re-raise it directly (see Major deprecations below). Accelerates waiting for already resolved promises.
- Does not prematurely fail a promise when its resolution triggers a breakpoint or signals a (resumable) Notification.
- Methods, context, and block closures:
- Adjusts further accessors and queries for the new SistaV1 bytecode set and full block closures. Cleans up vocabulary on BlockClosure and Context for accessing home contexts and methods.
- For Sista, allows creating classes with up to 64k instance variables.
- Fixes different instruction tests.
- Speeds up bytecode/literal enumeration for faster SystemNavigation queries.
- Improves method symbolic text through colorful styling and by labeling instance variable references.
- Makes CompiledCode equality invariant under the caches used for internationalization and BlockClosure>>once. Improves parsing of method timestamps.
- Allows constructing MessageSends without a receiver and extends their accessing/conversion/testing protocols. Improves polymorphism with WeakMessageSend.
- Speeds up enumeration of pragmas and selectors by 20%.
- Classes and organizers:
- Speeds up class (re-)building by more than 30% by using the MethodMassage package (see below).
- Improves overall reliability of source logging after correcting a syntax error and when recategorizing classes, removing class variables, or changing class comments.
- Automatically sanitizes category and package names by removing leading/trailing spaces. Adds conveniences Categorizer>>includesCategory: and #classifyAll:under:suppressIfDefault:. Renames ClassDescription>>[all]MethodsInCategory: to #[all]SelectorsInCategory:.
- Persists the preferences processPreemptionYields and "map control keys to command keys" across image restarts.
- Improves multilingual support in various places.
- Miscellaneous improvements to documentation of suspension/resumption points, stack unwinding, and others.
- Miscellaneous improvements to test coverage, especially for simulation, unwinding, and process termination.
- Overall clean-ups and refactorings. Work continues on improving modularization and avoiding dependencies from core packages on ST80, MorphicExtras, and EToys.
Collections (up to Collections-ct.1115/CollectionsTests-ct.419)
- Adds many new conveniences for enumerating, copying, and modifying collections and streams (click to browse them all!). Improves weak typing between magnitudes and dictionaries so that arithmetic can be applied to dictionaries (click here for examples!).
- Introduces AlternativeSortFunction for sorting collections based on binary predicates.
- Adds new string conveniences for prefix/suffix testing, escaping, and index-to-row/column conversion.
- Improves printStrings and object explorer representations of bags and sets, dictionaries and run arrays, strings and characters. Adds preview of formatted texts to object inspectors.
- Texts: Adds #addAttributeBack:* for adding new attributes beneath existing attributes and fixes TextStream>>withAttribute[s]:do: to preserve existing dominating attributes. Adds conveniences for testing texts for attributes and converting them to plain text. Improves polymorphism of texts with strings.
- Improves HTML parsing so that it now can correctly process most clipboard contents and rich-text emails (see below):
- Makes it possible to block downloads or execution of untrusted HTML resources.
- Adds support for <blockquote>.
- Revises whitespace handling for tags such as <p>, <div>, and <pre>.
- Properly ignores non-textual elements such as <script> and <style> tags.
- Improves robustness for parsing HTML5 void tags, redundant closing tags, and invalid/unsupported CSS properties.
- Fixes escaping/unescaping of special characters in HTML/XML entities and URLs.
- Adds support for base32 encoding/decoding.
- Adds Object>>isAssociation.
- Miscellaneous performance improvements for sequenceable collection accessing, linked list enumeration, RunArray accessing and sorting, string substitution and tokenization, text formatting, and character printing.
- Several bug fixes for RawBitsArray accessing, matrix enumeration, stream resetting and binary streaming, and filing in of hashed collections. Enhances accuracy of String>>findSelector heuristics (used by [CMD] + [N] for "senders of it" et al.) by trying to reuse the actual Smalltalk parser first. Improves hashing, copying, and comparing of text attributes and sort functions.
- Improves multilingual support in several places. Switches #asCommaStringAnd to use the Oxford comma.
- Overall clean-ups, refactorings, and documentation improvements.
Chronology (up to Chronology-Core-ct.98/Chronology-Tests-ct.40)
- Refactors time zones into an extensible class hierarchy to enable the definition of DST-aware zones such as TZ-Olson.
- Restores ANSI compliance of DateAndTime>>offset: by answering an equivalent time instead of reinterpreting it in a different time zone. Adds #asLocalAt: and #utcOffset: as compatibility synonyms of the old and new behavior.
- Repairs "high-resolution clock for timing" preference and improves precision of Time class>>nanosecondsToRunHighRes: when the preference is enabled.
- Fixes a race condition when terminating a process during BlockClosure>>valueWithin:onTimeout:.
- Overall improvements to documentation. Adds convenient accessor fields to inspectors on chronology objects.
Compiler (up to Compiler-ct.535)
- Allows sending #pvt* selectors to super, thus making it possible to override and extend private methods in subclasses.
- Parser warnings:
- Adds a new opt-in preference for interactive warnings about variable shadowing to replace classical transcript warnings.
- Removes warnings about undefined temporary variables when they are being sent a nil check.
- Adds missing warning about unknown binary selectors, analogously to warnings about unknown unary and keyword selectors.
- Improves handling of comments in the parse tree by always assigning them to the nearest expression or statement and printing nodes with comments more reliably. Adds new preference to control hard-wrapping comments during pretty-printing, which is now disabled by default.
- Records source ranges for variables by introducing VariableUsageNode to benefit selection in the debugger and source localization for other AST users.
- Avoids side-effects on symbol tables during parsing by signaling new UnknownSymbolNotification that cautious clients can handle before a new symbol is created.
- Moves Compiler class>>parserClass to Compiler class>>preferredParserClass.
- Fixes several parser bugs regarding pragmas (pragmas before temporaries, unary pragma parsers), handling underscore selectors, parsing standalone literals, and compiling future sends. Corrects slips during encoding and decompiling of Sista-specific instructions and full blocks.
- Adds a utility to compute static bytecode frequencies.
- Miscellaneous documentation improvements.
Environments (up to Environments-ct.88)
- Adds Object>>isEnvironment.
- Speeds up Environment>>classOrTraitNamed:.
PackageInfo (up to PackageInfo-ct.81)
- Automatically sanitizes package names by removing leading/trailing spaces.
- Improves multi-environment support when accessing classes of a package.
- Accelerates package-from-method lookup, speeding up Monticello snapshots by up to 400%.
Traits (up to Traits-ct.320)
- Adds trait templates with composition.
- Improves multi-environment support, so one can define and access traits in other environments correctly.
- Minor refactorings, in particular, uses new MethodMassage package for compiling traits.
MethodMassage (up to MethodMassage-ct.75)
Welcomes the MethodMassage package in the trunk, which makes it convenient to disassemble compiled methods as first-class objects with reified labels, inspect and rewrite them, and reassemble them. Previously, MethodMassage was developed and tested in the VMMaker repository for at least 10 years. Recent changes to the package include instance variable remapping to support class reshaping in the trunk, improved documentation and test coverage, several performance improvements, and full support for the V3PlusClosures bytecode set alongside SistaV1.
~~~ Graphics & Sound ~~~
Graphics (up to Graphics-nice.562)
- Adds support for basic CSS color functions to improve HTML parsing.
- Adds dithering for smoothly reducing the color depth of forms.
- Adds accessors for screen dimensions of multiple monitors.
- Improves font preview for symbol fonts.
- Fixes Color mercury, decoding of transparent pixel values, copying of forms and cursors, detection of missing glyphs in strike fonts, opening of GIF files, and loading of translucent interlaced PNG images.
- Several performance improvements for form filtering, color construction and crayon constants, rectangle merging, #px, and PNG reading. Removes unused font data to save space.
- Miscellaneous improvements for multilingual support, documentation, and test coverage.
- Deprecates AnimatedGIFReadWriter in favor of GIFReadWriter.
Balloon (up to Balloon-ct.36)
- Minor performance improvements.
- Improves documentation of gradient fills.
TrueType (Fonts) (up to TrueType-tpr.99)
- Fixes backward compatibility with fonts that only have a deprecated Unicode mapping table.
- Adds utility for exploring all glyphs of a font.
Sound (up to Sound-ct.102)
- Adds accessors for enumerating available sound player and recorder devices and setting the current device.
- Adds missing methods for stopping composite sounds.
- Adds a file service for reading AIFF files.
- Adds convenient inspector fields to sounds.
- Improves reliability of storing sounds (fixes redundant trailing zeros and an endianness issue when storing on in-memory streams).
- Improves performance of StreamingMonoSound.
~~~ Files & Network ~~~
Files (up to Files-mt.223)
- Adds a preference for caching the changes file in the image instead of logging changes to disk. This complements existing support for caching the sources file in the image (introduced in Squeak 6.0) and allows a Squeak image to run as a standalone file without further dependencies on the file system.
- Provides access to system environment variables and the current working directory of the VM.
- On Linux/Unix platforms, adds support for tilde (~) path expansion to the home directory.
- Adds a file service for browsing
.sourcesfiles. - Improves reliability of listing directories with some inaccessible entries, testing whether a directory exists, calculating creation and modification times of files.
- Improves error detection when opening a file or copying files.
- Fixes filing out of methods or change sets with a slash in their name.
- Improves performance when parsing file names, testing directory existence, and reopening a file in read-only mode.
- Extends documentation on file opening, long file paths on Windows, and creation/modification dates.
Compression (up to Compression-ct.64)
- Fixes file service for installing compressed change sets.
Network (up to Network-nice.289/NetworkTests-pre.80)
- Improves new network support for IPv6 and enables it by default. Extends object inspector and explorer representations of sockets and socket addresses.
- Adds file services for viewing and exploring EML files as mail messages.
- Improves rendering of mail messages that contain rich text or attachments and adds support for inline (cid) images.
- Extends SMTP client with new commands (verify, quit) and features (CRLF injection detection, 8BITMIME support, proper handling of 421 responses).
- Improves overall robustness and RFC compliance (click for details!) of serializing and parsing MIME documents and mail messages.
- Implements case-insensitive comparison of MIME types and case-insensitive access to parameters.
- Improves robustness of external-semaphore management for sockets.
- Miscellaneous improvements to test coverage for MIME documents, MIME types, SMTP sending, and IPv6 sockets.
- Extends documentation for MIMEType and socket utilities and examples.
- Improves performance of socket streaming.
SqueakSSL (up to SqueakSSL-Core-mt.36/SqueakSSL-Tests-ct.30)
- Updates list of current known bugs for SqueakSSL on Linux and macOS.
WebClient (up to WebClient-Core-ul.138/WebClient-Tests-nice.66)
- Allows web servers to process OPTIONS requests manually. For instance, this is required to handle CORS preflight requests properly.
- Several improvements and updates to WebServer documentation.
- Sunsets JSON parser in WebUtils in favor of the JSON package.
- Improves robustness of chunked transfer decoding and fixes parsing of WebCookie expiries.
- Speeds up MD5 computation in WebUtils by up to 600%.
JSON (up to JSON-ul.68)
- Adds new utility for navigating JSON-ish objects along paths.
- Miscellaneous fixes for parsing excessive inputs or negative zeros, testing key membership of ordered JSON objects, #at:ifAbsentPut:, and rendering JSON objects with non-string keys.
XML (up to XML-Explorer-eem.3)
- Fixes a performance issue when exploring huge XML documents.
~~~ System Services ~~~
System (up to System-ct.1522)
- Introduces ephemerons, which support instance-based finalization, a major improvement over the post-mortem finalization provided by WeakArrays. By using ephemeron identity dictionaries instead of weak identity dictionaries, weak indirect cyclic dependencies can now be properly garbage-collected for the first time.
- Revises extended clipboard interfaces and enables them by default. With this change, pasting rich text from the host system is supported in all operating systems. Copying rich text and copying/pasting other formats such as pictures is still experimental.
- Improves change recovery by discovering class definitions and method removals in change records and parsing the selectors of do-its.
- System navigation:
- Adds queries for browsing methods with primitives, pragmas in a package, and methods or classes in categories containing a token.
- Fixes queries for callers in package, methods containing a string, and methods containing pool variables, unbound globals, or unused blocks.
- Adds facilities for enumerating the class names in a system category and the versions of a class comment.
- Adds convenient accessors for image header flags such as high-DPI support and threaded VMs. Facilitates responding to platform changes after VM restarts by remembering the previous platform name. Improves detection of headless mode.
- Adds support for plain-text diffing to complement existing rich-text diffing.
- Adds an optional preference for reusing the size of tool windows, which previously was available for debuggers only.
- For the emergency mode REPL, adds a
clearcommand and improves high-DPI support. - Miscellaneous UI improvements:
- Adds syntax highlighting when editing the preamble or postscript of a change set.
- Revises the layout of the annotation setup dialog.
- Automatically derives the full name of known authors from their initials.
- Revises algorithm for collapsing more windows than fit in one column on the screen.
- For projects, adds an accessor to set an explicit name.
- Improves UI strings and multilingual support in several places.
- Tunes syntax highlighting colors for the Community Dark and Trim themes.
- Refactors debugger invocation and resumption for different GUI frameworks, making it easier to write and integrate a custom debugger. Introduces a debugger invocation cue for passing along additional context such as an exception to the debugger.
- Refactors and fixes the low-space watcher for Spur VMs and tunes thresholds to avoid premature redundant warnings.
- Miscellaneous fixes:
- Makes saving projects more reliable and improves backward compatibility for loading projects/morphs from older image versions.
- For change files, improves multi-environment during fileIn/Out, browsing of file-out classes, checking removed classes in a change set for slips, and condensing into new
.sourcesfiles. - Makes canceling default app dialogs safer and allows providing empty credentials for mail senders.
- Improves high-DPI support for window placement.
- Improves headless support for print-its, syntax errors, and interactive dialogs.
- Noteworthy optimizations for user interface theme requests (speeds up typical tool building by ~50%), window collapsing, changes enumeration, and space tallies.
- Improves documentation of several interfaces such as system navigation queries, VM parameters, and others.
- Cleans up unused preferences and project parameters.
Regex (up to Regex-Core-ct.93/Regex-Tests-Core-ct.38)
- Adds new support for Unicode literals (
\x41,\u{1F388}) and character class escapes (\p{N}, \P{Lu}), named capturing groups ((?<num>\d+)/(?'den'\d+)), and non-capturing groups ((?:ab)+). Allows nullable closures to be repeated ((a|b*)?). - Adds support for leftmost-longest matching (POSIX style) through an optional flag.
- Adds utility to escape strings for use in regular expressions.
- Adds convenience selectors for accessing captured groups.
- Makes #asRegex idempotent so methods that expect a pattern string can also take a preconfigured matcher instead.
- Fixes several issues with parsing nested or repeated quantifiers and lookaround-alike patterns.
- Fixes incorrect order of capture groups within branches and removes redundant capturing of lookarounds.
- Repairs broken regex prompt dialog.
SystemReporter (up to SystemReporter-eem.68)
- Updates description for Cog VM parameters and image-header flags.
PreferenceBrowser (up to PreferenceBrowser-codefrau.159)
- Improves robustness of preference wizard when adjusting settings for low performance.
Additional packages:
- FFI:
- A threaded version of the OpenSmalltalk VM that can run primitives and FFI callouts in the background is under development.
- Improves FFI exception handling by offering a configurable exception handling mode, adding support for PrimitiveError and ExceptionInFFICallError for failed FFI callouts, and adding a new pragma for asynchronous error reporting in ThreadedFFI.
- Adds support for varargs (optional arguments) in C declarations.
- Adds support for ARM64.
- Several robustness improvements to the type framework, thread safety, and platform changes.
- Adds more convenient Win32 utils.
- Overall improvements to test coverage, documentation, and performance.
- OSProcess:
- Enables buffered readers (such as PipeableOSProcess from companion package CommandShell) to stream over a very large input stream by implementing automatic pruning.
- Adds support for Cuis and Unicode strings.
- Sunsets support for the IOHandle package, which is no longer maintained for recent versions of Squeak.
- Overall stability and performance improvements.
- Refactoring tools: Minor bug fixes, extensions, and performance improvements for refactoring rules.
- A new version of Squot was released, which adds support for
git revert, tags, and co-authors, contains several UI improvements, and improves overall stability and performance. - The first stable version of Squeak Inbox Talk was released, which integrates the new HyperKitty archives for the Squeak mailing lists, adds support for rich-text messages and attachments (only available in the Squeak Trunk version), and contains several UI improvements.
~~~ Version Control & Package Management ~~~
Installer (VersionNumber, UpdateStream, Squeak-Version) (up to Installer-Core-ct.458/VersionNumber-eem.5)
- Adds support for HTTPS schemes to InstallerMonticello. Uses HTTPS for source.squeak.org and squeaksource.com.
- Avoids compiler and linter warnings when installing a Metacello package for the first time.
- Fixes a bug that polluted the current change set during the installation of Metacello. Slightly accelerates installation.
- Fixes comparison of version numbers with different lengths.
- Fixes multi-environment issue when unloading packages via Monticello.
Monticello (up to Monticello-ct.822/MonticelloConfigurations-codefrau.187)
- Adds "file out theirs" to the patch list menu of code dialogs (such as when saving a version or comparing two snapshots).
- Makes "add (all) to current change set" in code dialogs capable of class and script definitions.
- Improves support for HTTPS repositories and enables migration of existing HTTP repositories to HTTPS.
- Adds utility for eradicating a repository from all working copies.
- Improves robustness of MCFileBasedRepository>>versionNamed: by automatically appending a missing MCZ extension.
- Adds, improves, and fixes several dialogs.
- Fixes loading of classes and trait definitions without comments.
- Fixes multi-environment issues when loading/unloading organization definitions.
- Fixes merging and "copy reference" of removed definitions.
- Improves handling of #acceptsLoggingOfCompilation while loading packages.
- Fixes change detection of working copies when renaming categories.
- Improves error reporting when accessing HTTP repositories.
SqueakMap (up to SMBase-ct.147/SMLoader-ct.102)
- Fixes a bug when installing missing WebClient via SqueakMap.
~~~ Help & Internationalization ~~~
GetText
- No significant changes.
Multilingual (up to Multilingual-mt.293)
- Fixes a bug in UTF16 conversion for applying line-end conventions in little endian.
- Improves documentation on UTF8 encoding/decoding.
Help (up to HelpSystem-Core-ct.159/Help-Squeak-Project-ct.105)
- Help contents:
- Adds a tutorial on how to contribute to Squeak. Includes a short description of Squeak's community model, our development process, and recommended tools such as Monticello and Squeak Inbox Talk. It has never been easier to join the community - go ahead and make your first contribution NOW! :-)
- Updates keyboard shortcut reference with global shortcuts and shortcuts for windows, menus, lists, and trees as well as instructions to customize shortcuts.
- Improves and updates several sections of the terse guide.
- Minor clean-ups and improvements on various help topics. Updates collection of online resources.
- Moves release notes (like this one!) into the image, which were previously managed on GitHub. They are mirrored to squeak.org/release_notes/, so you can view them and click on examples to run them in SqueakJS even if you have no image at hand (how dare you!).
- Help system:
- Expands support for editing help through the help browser without writing code. Users can now manage custom help topics and file-based help topics by using the context menu in the tree view or dragging and dropping topics.
- Revises icons in help browsers for empty help books, references of generic classes, and search results.
- Refactors help search and integrations for files/directories and HTML sites into the help system. In directory-based help topics, now uses the same sorting strategy for child directories (recursively).
- Stability improvements for browsing single styled topics, editing contents of directory topics, and searching topics.
~~~ Deployment & Miscellaneous ~~~
Tests (up to Tests-ct.522)
- There are now over 5800 tests in this release that run in less than 3 minutes on our CI.
- Improves precision and coverage of tests for DataStreams, UI themes, and package dependencies.
- Improves safety of several tests that might have corrupted or crashed the image before.
ReleaseBuilder (up to ReleaseBuilder-mt.248)
- Minor improvements for setting preferences reproducibly when creating new release images.
Major Deprecations (up to 60Deprecated-ct.117/61Deprecated-ct.29)
Miscellaneous minor deprecations in different packages. We value backward compatibility and try to avoid breaking changes wherever possible (see Compatibility Notes below for exceptions). All non-private methods and classes that were removed during refactorings are preserved in the 61Deprecated package and signal a (suppressible) deprecation warning when used.
- As part of a debugger refactoring, project-specific debugger subclasses (MorphicDebugger and MVCDebugger) have been eliminated. Custom debuggers can now directly inherit from Debugger again.
- Deprecates BrokenPromise: If a promise is rejected, Promise>>wait et al. will now resignal the original exception (or a generic error if the promise was rejected without an exception). If the 61Deprecated package is installed, you can still handle BrokenPromise, but it is no longer a subclass of Error. Note that the decision to deprecate BrokenPromise is tentative and might be revised again.
- Renames misleading Promise>>error to #errorValue.
- Renames ClassDescription>>[all]MethodsInCategory: to #[all]SelectorsInCategory: because they never answered code objects but always symbols.
- Deprecates SequenceableCollection>>checkedAt: and #copyWithoutFirst.
Known Issues
- Debugger notifiers raised from background processes may appear with a disabled "Proceed" button. As a workaround, you can first click on "Debug" and then on "Proceed".
- An issue with recursive process-faithful debugging may cause rare infinite loops when performing certain steps in a debugger. If you encounter this issue, please follow the steps advised here and send us a bug report to reproduce the situation. :-)
- Regular expressions handle greedy patterns inside lookbehinds incorrectly.
- Running an HTTPS server via SqueakSSL is currently not working on Linux and macOS.
- On Linux, the image may run out of file descriptors in certain situations. This can manifest as recurring primitive failures from #primGetPosition: or an unresponsive image. As a workaround, you can increase the number of allowed file descriptors using
ulimit -n. - On Linux when using Wayland, text morphs may loose their focus on every click (a workaround is attached to the bug report).
- Found another bug? Share it with us on http://bugs.squeak.org/! :-)
Compatibility Notes
- Promise>>value now waits for the receiver (previously, it returned nil instead until the receiver had resolved).
- Matrix>>with:do:, #with:collect:, and #with:inject:into: no longer implicitly ignore size-mismatches between both matrices but signal a clear error in this case.
- Text>>format: and TextStream>>withAttribute[s]:do: now insert attributes from the last argument above existing attributes instead of beneath them, e.g.:
Text streamContents: [:stream |
stream withAttributes: {TextColor blue. TextEmphasis bold} do:
[stream nextPutAll: 'abc'.
stream withAttribute: TextColor red do:
[stream nextPutAll: 'def']]].
'hi {1}' asText
addAttribute: TextColor red;
format: {'name' asText addAttribute: TextColor green}.
- DateAndTime>>offset: has been fixed for ANSI compliance and now answers an equivalent version of the receiver in a different time zone instead of reinterpreting the receiver in a different time zone. Use #asLocalAt: for the old behavior or #utcOffset: to avoid cross-compatibility issues.
- Regex: Captured subexpressions are now stored consistently in left-to-right order (previously, captures in alternatives were ordered from right to left).
- When constructing menus, #addList: now interprets backslashes in help tuples as line breaks.
- Help system: The sortBlock for FileBasedHelpTopic and DirectoryBasedHelpTopic is now applied to directories as well and propagated recursively to subdirectory topics. See AbstractFileBasedHelpTopic>>defaultSortBlock for a possible implementation.