*** Squeak 5.1 Release Notes *** Note that there is a 32-bit and an experimental 64-bit version of this release. There are currently no means to simply convert a 32-bit image into a 64-bit or vice versa (even with limitations). While there is no problem for source code, to transfer objects between images, you have to either serialize them (into source code) or use DataStream. This Squeak release introduces the support for various user interface themes. It comes already with several dark and light themes. See the Extras menu in the world docking bar to choose between themes. While all widgets used for system tools are themed, there might one or another morph that still looks awkward in some theme, especially when coming from "MorphicExtras". Improvements in Language, Tools, and the Environment Chronology - All time, date, timespan etc. related classes were extracted into a custom "Chronology" package to clean-up the "Kernel" package - Time zone offset works now correctly in DateAndTime - Clock is 64-bit based WebClient - Support the args variable in HTTPSocket class >> #httpGet:args:user:passwd: Network - Fixes percentage decoding for URIs - Fixes parsing email addresses that contain an ampersand - Several fixes and improvements in Socket - Decrease the chance of UUID collision by using the UUIDPlugin if possible and also speed-up in-image UUID generation otherwise - Adds #isOtherEndConnected and #isThisEndConnected for robust network programming - Fixes in NetNameResolver Compression - Fixes a bug to avoid creating thousands of file streams when compressing thousands of files Graphics - Let FormSetFont decide whether it should be colorized or not - Adds a set of crayon colors to extend the choice of named colors - New version of JPEGReadWriter2 plugin - Re-rendered bitmap fonts of "DejaVu Sans", which is used as the basic font in Squeak. See https://github.com/krono/Squeak-Fonts - New font sizes for default font. Now we have #(7 9 12 14 17 20), which should also work for high-DPI displays - New bitmap font rendering of "DejaVu Sans" to be used on dark backgrounds, which better captures sub-pixel AA compared to the regular rendering, i.e. "Bitmap" vs" Darkmap". - More robust PNG decoding - Adds convenient interface to set the host window size accurately - Some clean-up in the AbstractFont, StrikeFont, TTCFont hierarchy - Some performance optimizations to support Scratch on the Raspberry Pi platform - Specify a smoothing factor when scaling forms - For TrueType fonts, use all glyphs and not just 256 Multilingual - Speed-up language environment startup - Few improvements for Unicode handling Compiler - Several fixes and clean-up in Compiler, Decompiler, Parser, and Encoder - Improved support for custom (Etoys) compilers - Add option to avoid interactive error correction when parsing and compiling code - Improves debugging support for optimized block temps Environments - Embed help in Squeak's help browser - Some serialization fixes - Adds Environment >> #collect: Kernel - Adds support for saving block closures on DataStream - Fix simulation of the #withArgs:executeMethod: and #tryPrimitive:withArgs: primitives, as well as providing support for #tryPrimitiveFor:receiver:args: when it is implemented - New Mutex and Monitor primitives and functional debugging support for them - Adds support for VMs to provide real mouse-wheel events - Adds MethodContext >> #actualStackSize - Accelerate #bitAnd: in case of negative SmallInteger receiver and LargePositiveInteger operand - Fix detection and clean-up of uni-classes, which is an auto-generated class that has just one instance - Stop sounds/music on user interruption via [CMD]+[.] again - More robust user interruption via [CMD]+[.] because CogVMs do not yield preempted processes. That makes "[ [] repeat] fork" interruptable again - Nicer display of Integer >> #tinyBenchmarks results: 110,000,000 bytecodes/sec; 1,200,000 sends/sec - Remove InputSensor for the sake of EventSensor, deprecate several peek* methods to encourage queue-based event processing in UI frameworks - Adds Integer >> #integerPart and Integer >> #fractionPart - Adds CompiledMethod >> #withoutPrimitive - Several fixes for serialization of basic data types in a 64-bit Spur VM - Random improvements ;-) - Adds support for ephemeron classes to improve object finalization in the future - Increase the maximum of literals in a method to 32767 System - Improve support for natural language translation via an InternalTranslator or GetTextTranslator. For the latter, you have to put the .mo files into the "locale" folder to choose your language via Extras > Language. - Adds a small lookup table from author names to author initials (and vice versa) based on historical information. Squeak contributors of all time. - Adds support for a new way of storing preferences that primarily address visual representations: user interface theme. - Improves the project architecture and modularization for Morphic projects and MVC projects. Lays groundwork for new kinds of user interface frameworks. If you enter one kind of project from another kind of project (e.g. Morphic from within MVC), that outer kind will be entered in case of recursive errors instead of showing the emergency evaluator directly. - Makes MVC unloadable again. Unloading Morphic still needs a little more work. - Add a reasonable low-space limit for StackVMs and CogVMs - Fixes SmartRefStream for 64-bit Spur VMs. - Speed-up SecureHashAlgorithm - The demo mode (aka. hi-dpi mode) can be enabled and disabled again. Collections - Deprecate #sortBy: in favor of the cleaner implementation #sorted: - Some fixes in HtmlReadWriter - New Ascii85Converter akin to Base64MimeConverter - Several improvements in Heap - Adds support for generator-based enumerating interface in Stream - Some 64-bit improvements in ByteArray - Makes instances of Text more polymorphic with String - Improved support for wide-character strings - Deprecate #includesSubString: in favor of #includesSubstring: Monticello - In the save dialog, prevent users from discarding commit messages by accident. - Fixes Monticello history access - Adds some custom warnings for common tasks - In the save dialog, make reverted items distinct from ignored items - In the save dialog, adds keyboard shortcut [CMD]+[SHIFT]+[i] to ignore items - Provide a more descriptive update dialog - Support multiple update streams per repository Files - Adds FileDirectory >> #assureAbsence akin to FileDirectory >> #assureExistence - Adds FileDirectory >> #directoryNamesMatching: akin to FileDirectory >> #fileNamesMatching: - Improve file stream write synchronization - Deprecate CrLfFileStream Installer - Update package catalog with a JSON parser - Removes support for deprecated gestone.com repository HelpBrowser - Adds support for directory-based and file-based help topics - Improves live editing of help topics in the help browser - Work around broken links when parsing an HTML help topic Sound - Fixes strange sound bug that occurred when reverb was disabled - Improved support for MIDI playback. Includes support for dropping MIDI files into the image and start playing a MIDI via "(MIDISound fromFileNamed: 'some.mid') play". - Fixes sound playing in the way that it goes through the SoundService to ensure sound preferences. ToolBuilder (Kernel, Morphic, MVC) - Adds specific control for filterable lists and filter clearing per list widget - Adds (resp. restores) support for pluggable dialogs - Adds specific control for scroll bar policies per list/tree/text widget - Improves drag-and-drop mechanism in pluggable lists/trees. - For MVC, fall back to lists when creating trees because there is no tree view Morphic - Fixes object explorer representation of OrderedDictionary - Make error handling in Morphic drawing code more robust by collecting errors and only presenting debuggers for different sorts of bugs. - Speed-up object explorer for large collections - Make multi-level text undo work again ([CTRL+Z] and [CTRL+SHIFT+Z]) - Adds support for a label to ThreePhaseButtonMorph (i.e. check boxes or radio buttons) - The "smart search" in the main docking bar's search bar can be disabled now - Big refactoring of Morphic's event handling mechanism. Adds support for event filters and moves handling of focus events into the MorphicEventDispatcher. Event filters are used for implementing reliable keyboard shortcuts. Filters can apply to the event capturing and event bubbling phase. (read more) - Adds MouseWheelEvent, #handlesMouseWheel:, and #mouseWheel: -- keep mapping [CTRL]+[up/down] to mouse-wheel events if the VM does not send real mouse-wheel events - Improves keyboard focus and window interaction with three (new) preferences: (1) Windows Raise on Click, (2) Windows' Contents are Always Active, and (3) Windows' Controls are Always Active. - Improves MorphicAlarmQueue to not be a Heap but use one - Modularize tool window sharing by moving #representsSameBrowseeAs: into the respective tool packages - Adds "Enclose selection" as preference to enclose a text selection with brackets etc. - Several updated keyboard shortcuts for the world (too), the main docking bar, system windows, and text editors -- especially [CMD]+[SHIFT]+[D] now does "debug it" instead of "duplicate it" in text editors - Adds DialogWindow and use it to implement FillInTheBlankMorph and UserDialogBoxMorph MorphicExtras - Adds HistogramMorph akin to GraphMorph - Make postscript rendering work again with current default fonts Tools - Fixes a regression in the debugger notification window - Speed-up code browsing with icons enabled - Fixes an issue with balloon help in message lists in the FileContentsBrowser PreferenceBrowser - Adds a simple preference wizard (or assistant) to configure many important settings on first image start - Fixes mouse wheel scrolling due to the use of event filters - Minor UI fixes to make the preference browser look more like other tools in the system MVC (ST80) - There are several fixes and clean-ups in conjunction with the projects refactoring mentioned above. Except for the ones using a tree widget, tools should also work in MVC land. MVC can always be used to debug serious issues in Morphic. - Simplifies loading and unloading MVC. - Removes two-tone cache optimization for system windows to fix drawing glitches in font rendering SUnit Testing - Adds a new SUnit extension for tests which require an internet connection ReleaseBuilder - Clean-up and automation to simplify and guide the release building process - Adds help scripts to write release notes more quickly - Use the #startUp: method to process deferred tasks or tasks after saving and not closing the image. - Adds a check for undeclared symbols in source code - Adds a script to copy packages from one repository into another Regex-Core - Adds support for regular expressions to the Squeak base image based on VB-Regex. - Fixes many bugs in RxParser, RxMatcher, RxMatchOptimizer, etc. based on the experience with that regular expression package in Pharo. Known Issues - List filtering in multi-selection lists may break sometimes, i.e. in the TestRunner - Collecting colors via Form >> #collectColors: might lead to unexpected results because the Color black will be treated as transparent color here. - There will be a stack overflow when creating collections with a negative size, like "String new: -1". - Some of the more recent Cocoa-based macOS VMs have issues with key-up and key-down events in combination with modifier keys (CTRL, ALT, CMD). - Depending on the VM version on a Windows platform, there are several key-stroke events not provided such as "CTRL key stroked". - SqueakSSL has no SAN support for all platforms. This can be the reason why https://www.github.com cannot be accessed but https://github.com works. - There can be issues when using interface languages other than English due to automatic translation. This will be addressed in future releases. - You cannot apply a user interface theme from within MVC. Compatibility Notes - Several classes and methods were deprecated and will be removed in the future. - CI scripts have to aware that MCMcmUpdater class does no longer respond to #updateFromServer*. - Handling focus events was moved from Morph >> #handleFocusEvent: into MorphicEventDispatcher. See current implementation of Morph >> #handleFocusEvent:. You now have to implement #processFocusEvent:using:, which is more consistent with #processEvent:using:. - The use of event listeners is discouraged. Use event filters instead. - Many pop-up "menus" for choosing from a list of items got replaced with a dialog in Morphic. Still, those dialogs can be dismissed with the [Esc] key or by clicking somewhere in the world. All other (real) state-based pop-up menus remain. - In the course of introducing user interface themes, window color specifications were removed. Custom tools have to implement #defaultWindowColor now to get a color if the particular UI theme does not account for that particular tool.! ]style[(32 37 12 147 1 139 10 58 21 63 6 228 52 2 10 174 11 26 10 14 4 13 46 2 8 131 6 26 4 107 20 5 19 43 15 2 12 95 9 6 11 62 13 25 5 25 15 100 37 172 4 126 3 28 9 63 12 76 7 42 16 75 13 81 9 138 34 89 13 59 5 8 24 2 7 44 10 25 24 5 23 46 31 30 5 5 7 93 11 15 33 14 8 21 12 14 20 282 17 41 26 94 11 100 23 5 24 8 35 77 6 37 9 104 5 2 7 58 18 4 17 101 17 35 31 6 10 167 20 17 1 7 13 24 7 14 3 377 15 33 14 33 19 23 11 9 7 5 8 9 12 60 8 17 14 7 16 9 19 27 4 61 6 8 6 17 9 22 4 23 6 24 22 45 19 2 11 127 15 45 8 21 7 179 5 8 31 9 33 8 41 9 36 74 10 32 4 65 12 19 15 5 15 110 9 8 6 45 6 139 9 93 12 31 35 117 17 147 18 52 8 42 17 62 17 116 21 72 21 136 24 29 13 23 12 10 22 139 9 9 15 2 19 6 12 134 18 156 17 8 2 3 4 5 3 48 25 164 9 2 3 3 20 2 14 6 12 102 12 25 19 5 18 2 14 7 14 9 10 8 20 40 6 123 29 8 19 2 18 16 17 226 10 264 13 102 13 46 30 2 15 42 5 53 19 24 9 102 10 43 13 35 10 74 8 24 8 2 9 2 16 79 13 75 10 25 23 95 4 89 14 279 9 8 3 55 22 24 18 51 9 147 3 3 20 35 10 68 18 86 27 6 22 32 27 28 25 32 20 100 29 240 40 33 19 20 2 34 11 22)b,,i,,cred;,,Rcode://ToolSet browseHierarchy: DataStream selector: nil;,,Rcode://UserInterfaceTheme;,,i,,b,,i,,Rcode://DateAndTime now explore;,,i,,i,,Rcode://HTTPSocket class >> #httpGet:args:user:passwd:;,,i,,Rcode://Socket;,,Rcode://UUID >> #makeUUID;,,Rcode://#isOtherEndConnected;,,Rcode://#isThisEndConnected;,,Rcode://NetNameResolver;,,i,,i,,Rcode://FormSetFont;,,Rcode://Color orderedCrayonColors explore;,,Rcode://Color class >> #ocean;,,Rcode://JPEGReadWriter2;,,Rhttps://github.com/krono/Squeak-Fonts;,,i,,Rcode://PNGReadWriter;,,Rcode://DisplayScreen class >> #setNewScreenSize:;,,Rcode://ToolSet browseHierarchy: AbstractFont selector: nil;,,Rhttp://www.squeaksource.com/NuScratch.html;,,Rcode://Form >> #scaledToSize:smoothing:;,,i,,i,,Rcode://#wantsInteractiveErrorCorrection;,,i,,Rhttp://lists.squeakfoundation.org/pipermail/squeak-dev/2014-September/180018.html;,,Rcode://Environment >> #collect:;,,i,,Rcode://DataStream;,,Rcode://#withArgs:executeMethod:;,,Rcode://#tryPrimitive:withArgs:;,,Rcode://#tryPrimitiveFor:receiver:args:;,,Rcode://Mutex;,,Rcode://Monitor;,,Rcode://EventSensor >> #processMouseWheelEvent:;,,Rcode://MethodContext >> #actualStackSize;,,Rcode://#bitAnd:;,,Rcode://SmallInteger;,,Rcode://LargePositiveInteger;,,Rcode://[ [] repeat] fork;,,Rcode://Integer >> #tinyBenchmarks;,,Rcode://EventSensor;,,Rcode://Integer >> #integerPart;,,Rcode://Integer >> #fractionPart;,,Rcode://CompiledMethod >> #withoutPrimitive;,,Rcode://Random;,,Rcode://Class >> #ephemeronSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category:;,,Rcode://CompiledMethod class >> #maxNumLiterals;,,i,,Rcode://InternalTranslator;,,Rcode://GetTextTranslator;,,i,,Rcode://SystemNavigation authors explore;,,Rcode://SystemNavigation authorsInverted explore;,,Rcode://UserInterfaceTheme;,,b,Rcode://Project;b,b,,Rcode://MorphicProject new enter;,,Rcode://MVCProject new enter;,,Rcode://SmalltalkImage >> #lowSpaceThreshold;,,Rcode://SmartRefStream;,,Rcode://SecureHashAlgorithm;,,b,,Rcode://Preferences setDemoFonts;,,Rcode://Preferences restoreDefaultFonts;,,i,,Rcode://#sorted:;,,Rcode://HtmlReadWriter;,,Rcode://Ascii85Converter;,,Rcode://Base64MimeConverter;,,Rcode://Heap;,,Rcode://Stream >> #collect:;,,b,,Rcode://ByteArray;,,Rcode://Text;,,Rcode://String;,,Rcode://WideString;,,Rcode://#includesSubstring:;,,i,,Rcode://MCEmptyDiffyVersion;,,i,,i,,i,,Rcode://FileDirectory >> #assureAbsence;,,Rcode://FileDirectory >> #assureExistence;,,Rcode://FileDirectory >> #directoryNamesMatching:;,,Rcode://FileDirectory >> #fileNamesMatching:;,,i,,Rcode://Installer >> #jsonParser;,,i,,Rcode://DirectoryBasedHelpTopic;,,Rcode://FileBasedHelpTopic;,,Rcode://HtmlHelpTopic;,,i,,Rcode://#stopReverb;,,Rcode://ToolSet browseHierarchy: MIDISound selector: nil;,,Rcode://SoundService;,,i,,Rcode://PluggableDialogWindow;,,Rcode://MVCToolBuilder >> #buildPluggableTree:;,,i,,Rcode://OrderedDictionary >> #explorerContents;,,Rcode://WorldState >> #displayWorldSafely:;,,b,,Rcode://ThreePhaseButtonMorph;,,b,,Rcode://#filterEvent:for:;,,Rcode://#processFocusEvent:using:;,,Rcode://MorphicEventDispatcher;,,Rcode://Morph >> #eventFilterDocumentation;,,Rcode://MouseWheelEvent;,,Rcode://#handlesMouseWheel:;,,Rcode://#mouseWheel:;,,b,,Rcode://MorphicAlarmQueue;,,i,,Rcode://Heap;,,i,,Rcode://#representsSameBrowseeAs:;,,Rcode://PasteUpMorph >> #filterEvent:for:;,,Rcode://PasteUpMorph >>#keystrokeInWorld:;,,Rcode://DockingBarMorph >> #filterEvent:for:;,,Rcode://SystemWindow >> #filterEvent:for:;,,Rcode://TextEditor class >> #initializeCmdKeyShortcuts;,,Rcode://DialogWindow;,,Rcode://FillInTheBlankMorph;,,Rcode://UserDialogBoxMorph;,,i,,Rcode://HistogramMorph;,,Rcode://GraphMorph;,,Rcode://PostscriptCanvas;,,i,,Rcode://Preferences class >> #balloonHelpInMessageLists;,,Rcode://FileContentsBrowser;,,i,,Rcode://PreferenceWizardMorph open;,,i,,Rcode://MVCProject class >> #unloadMVC;,,i,,Rcode://TestCase >> #ensureInternetConnection;,,i,,Rcode://ReleaseBuilder class >> #step1FeatureFreeze;,,Rcode://ReleaseBuilder class >> #fileOutChangesBetweenReleases;,,Rcode://ReleaseBuilder class >> #startUp:;,,Rcode://ReleaseBuilder class >> #checkForUndeclaredSymbols;,,Rcode://ReleaseBuilder class >> #copyPackagesFrom:to:depth:;,,i,,Rhttp://www.squeaksource.com/Regex;,,Rcode://RxParser;,,Rcode://RxMatcher;,,Rcode://RxMatchOptimizer;,,b,,Rcode://TestRunner open;,,Rcode://Form >> #collectColors:;,,Rcode://Color class >> #colorFromPixelValue:depth:;,,Rcode://String new: -1;,,Rcode://SqueakSSL;,,Rhttps://en.wikipedia.org/wiki/Subject_Alternative_Name;,,Rcode://(WebClient httpGet: 'https://www.github.com') explore;,,Rcode://(WebClient httpGet: 'https://github.com') explore;,,Rcode://Project current chooseNaturalLanguage. 42;,,Rcode://MVCProject new enter;,,b,,Rcode://(MCPackage named: '51Deprecated') workingCopy browse;,,Rcode://MCMcmUpdater class;,,Rcode://Morph >> #handleFocusEvent:;,,Rcode://MorphicEventDispatcher;,,Rcode://Morph >> #handleFocusEvent:;,,Rcode://#processFocusEvent:using:;,,Rcode://#processEvent:using:;,,Rcode://MorphicUIManager >> #chooseFrom:lines:title:;,,i,,Rcode://#defaultWindowColor;,,b,,Rcode://SqueakTheme class >> #addWindowColors:;,!