*** Squeak 5.3 Release Notes *** In this release, we managed to revise the entire implementation of DateAndTime, fixed many longly existing layout bugs in Morphic, improved the overall compatibility with the new SistaV1 bytecode set (not yet enabled by default), hunted down various missing #cleanUp: methods, increased the performance of syntax highlighting and arithmetic operations ... and improved many more things to make the overall experience in Squeak/Smalltalk richer, deeper, and more convenient. Please find below a detailed listing of all the changes, which includes notes on Major Deprecations, Known Issues, and Compatibility Notes at the bottom. /^(o.o)^\ /^(o.o)^\ /^(o.o)^\ /^(o.o)^\ /^(o.o)^\ Detailed Improvements in Language, Tools, and the Environment ~~~ Core Language ~~~ Kernel - Refactors CompiledCode >> #literalsDo: to support CompiledBlock (SistaV1) and always-thorough literal lookup - Accelerate LargePositiveInteger >> #asFloat in 64-bit images - Accelerate mixed Integer-to-Fraction comparison - Accelerate some huge-Integer arithmetic - Adds #isDeprecated on code objects to be used in programming tools - Adds BlockClosure >> #on:ensure: besides #on:do: as a convenient way to clean-up but pass on the exception - Speeds up deletion of class variables or shared pools - Introduce configurable parameters for tuning the Large*Integer arithmetic thresholds. - Improved implementations of #sqrt - Fixes that (0 bitShift: 100) is normalized and not a large-integer zero - Refactors the fast Large*Integer operations - The faster multiplication algorithm is now the default for multiplying integers - Adds CompiledMethod >> #pragmasAt: for convenient access to multiple pragmas of the same pragma selector. - Improves Promise resolution error handling and adds some utility methods - Several fixes in simulation code (e.g. primitive 188) - Improves compatibility between 32-bit and 64-bit systems for LargePositiveInteger hash - Adds Object >> #changeClassTo: as a more readable form of Behavior >> #adoptInstance:. - Harmonize method references and class references. Collections - Adds Text >> #format: - Fixes #collect:as: for Set into Dictionary - Adds String >> #findFeatures, which is simple analysis of natural language in source code. No word stemming. Interface is similar to #findTokens - Adds Collection >> #any: and Collection >> #take:. Works like #first: for sequenceable collections. #take does not fail if collection is too small. - Adds Collection >> #log2, since it already responds to #ln and #log - Adds Collection >> #isOfSameSizeCheck:, similar to #emptyCheck - When creating a text from a string and runs, check whether the run length matches string length - Definitively abandon SequenceableCollection equality tests based on equal species. Old behaviour can still be obtained through #hasEqualElements: but the default is to not try to support such trans-class equality feature because it is much too complex. - Better performance in some String functions - Better performance in some HashedCollection functions - Better performance in some SequenceableCollection functions - Fixes an endless-loop bug in HtmlReadWriter - Changes in ifEmpty:ifNotEmpty: -- Replace the few sends to #valueWithPossibleArgument: with #cull: because there is no need to expect blocks with more than one argument to be filled with nils. - Fixes a bug in OrderedDictionary Chronology - Change the internal representation of DateAndTime as described on http://wiki.squeak.org/squeak/6197 - original development at http://www.squeaksource.com/UTCDateAndTime - "UTCDateAndTime is a UTC based implementation of class DateAndTime with one instance variable representing the magnitude of the point in time, and another representing local time zone offset." - Adds Time class >> #highResClock - might not be available in your VM (or machine) - Adds Time class >> #nanosecondsToRun: besides #microsecondsToRun: and #millisecondsToRun:; also see BlockClosure >> #durationToRun Compiler - Fixes ifNil:ifNotNil: decompilation - Fixes decompilation of full blocks - Always quote parser error notifications (also in interactive mode) to make syntax highlighting work in tools - Fixes in EncoderForSistaV1 - Fixes in Heap - Improves handling of syntax errors - Makes SyntaxErrorNotification resumable Environments - Cleans up message categories Traits - Time to run all traits tests reduced from over 10 minutes to roughly 1-2 minutes PackageInfo - Adds convenience messages to look up packages in the package organizer by name ~~~ Graphics & Sound ~~~ Graphics - Improved implementation of named colors such as Color banana, which speeds up Color >> #name - Fixes in the HTML representation of colors - Adds infix versions for creating rectangles from points around a center - Improved support for virtual displays - Font-size summary now has proper formatting to match the respective font faces - Improved Form implementation to better fit Spur (memory model) Balloon - Cleans up message categories TrueType (Fonts) - Minor changes to better support clean-up of TrueType fonts for release building. - Fixes TTCFont-to-TextStyle detection, which makes EtoysTheme look better. - Cleans up message categories Sound - Use a byte-oriented file stream to read MIDI files, and ensure the file is closed on reading. ~~~ Network ~~~ Network - For the FileList tool, fixes an endless cycle when listing server directories that miss login credentials. - Better comments in FTPClient - Improves mail-address tokenization SqueakSSL - Stills works after loading Metacello via Installer class >> #ensureRecentMetacello WebClient - Fix a bunch of serious bugs in json number decoding - Fix ssl hostname pass-through in Proxy settings (see https://github.com/squeak-smalltalk/squeakssl/issues/5) - Fixes an issue with chunked encoded WebMessages which resulted in already decoded content to be decoded again. While not perfect it is important to allow for larger GitHub repositories such as Metacello. - Handle quoted-string valued parameter for charsets in WebMessage >> textConverterForContentType. Also, don't raise an error when the specified encoding has no matching converter. - Decrease the priority of connection handler processes from 60 to 30, which is below the Morphic UI process (40), to avoid potential image lockups. XML - Use FileServices as the registry for file services ~~~ System Services & Files ~~~ Files - Deprecates classes and methods related to executing Squeak in a web browser through a browser plugin. They can be loaded through the 60Deprecated-NSPlugin-System-Support package. Compression - (No changes) Regex - Minor code clean-up System - Improves implementation of system-change events - Navigation makes use of String >> #findFeatures to improve the quality of class/trait search - VM can be instructed to #sendMouseWheelEvents, which depends on the VM version to work - Fixes in SmartRefStream - Fixes the bug with entering/leaving projects that change the display depth. ~~~ GUI Frameworks ~~~ ST80 - Make CMD+Dot (aka. user interrupt) work in freshly created MVC projects that never requested a UI manager before. - Categorized uncategorized messages in ST80 and moved test methods to tests. Morphic - All references to the global variable World got replaced with "Project current world"; ActiveWorld is more trickier because it acts as a DynamicVariable in disguise. :-) - Makes the creation of Morphic worlds easier - Major fixes in the layout mechanism, which affects TableLayout in particular; see Morph >> #doLayoutIn: and #layoutInBounds:; adds support for height-for-width properties such as text morphs; also supports layout policies in scroll-pane scrollers including #shrinkWrap resize behavior - Fixes PluggableTextMorph >> #textEdited: to trigger for all kinds of changes to the text made by user interactions - Several fixes in StringMorph - Makes the project-thread navigation morph work again; see https://wiki.squeak.org/squeak/1949 - Fixes several layout bugs in DialogWindow - Adds syntax highlighting to text selections via CMD+6 then "style it" -- good for taking notes or writing tutorials - Adds "debug invocation" to DialogWindow besides "explore invocation", which is useful to understand the reason for (modal) dialogs popping up out of nowhere - In text editors/fields, reference browsing (CMD+SHIFT+N) now correctly includes references in pool dictionaries. - More robust flex-shell wrapping for morphs - Fixes layout and drawing issues for resizes grips in windows and dialogs - Adds compatibility protocol to convert SimpleButtonMorph to PluggableButtonMorph - For "Tally it" on a text selection, show the results in a dialog instead of a menu - For specific Squeak help, open the entire book and select the specific topic page instead of just opening that topic page. This makes it easier for users to learn about topics in context. - In the world's main docking bar, there "windows" menu now has a "collapse all windows" entry. - Several fixes in halo activation and transfer between morphs - Fixes the flickering of the text cursor over clickable text actions (such as TextURL) - Harmonize list widgets and tree widgets a little bit more. That is, let trees trigger the yellow-button menu on [escape] like lists do. - Adds two more specific preferences #haloForAll and #metaMenuForAll. Further reduce the usage of #cmdGesturesEnabled. - Fixes a regression with the wrong mouse cursor in pop-up menus. - Adds a preview morph for results of all BitBlt rules. - Create AnimatedImageMorph from array of images. Setter access for inter image delay to uniform value. - Fixes in SketchEditorMorph - Fixes in TextOnCurve - Fixes in PianoRollNoteMorph - Adds UI themes to the ObjectsTool - Fixes in FrameRateMorph - Fixes bugs in project background (color or fillstyle) - For pluggable buttons and text morphs, adds "debug button invocation" and fixes "browse button code" menu entries in the halo/debug menu - Improved support for high-dpi displays: scale up icons, better highlight of list filters Etoys - Various clean-ups, fixes, and deprecations. - Fixes several fonts ~~~ Help & Internationalization ~~~ GetText - (No changes) Multilingual - Improvements in various text converters - UTF16TextConverter will now take endianness into account when writing the BOM - Fix and unify Unicode data downloading Help - Be able to override code styling in help topics. This is useful if you have one introductory page besides a page with source code - For class-based help topics, adds support to store help contents in any method in the system. Uses message sends for the indirection. First use case is the Squeak license, which is stored in "Smalltalk license" and which should be available even without the help system. - Adds Behavior >> #openHelpBrowser - Method topics are now linked to their definitions on both Instance and Class side. When you notice methods without comments, adding them in just one click away. - Fixes an endless-loop bug to could occur when fetching swiki subtopics. - Add note about VMMaker package - Updates page "extending the system" - Updates page "keyboard shortcuts" - In the system reporter, include description of the flags in VM parameter 65 - In the system reporter, add (how) "To Build A Similar Virtual Machine" information to the VM General tab in the SystemReporter ~~~ Programming Tools ~~~ Tools (ToolBuilder, CommandLine, Protocols) - In code browsers, highlight deprecated messages in message lists - Refactors the implementation of Debugger wrt. Project and ToolSet, which should simplify the creation of a custom project or toolset. There is now a MorphicDebugger and MVCDebugger. - Code clean-up in ChangeSorter, ChangeSet, and ChangesOrganizer - Many fixes and improvements in the Vocabulary/Protocols/Lexicon tool - Fix syntax highlighting in SyntaxError tool - In inspectors and object explorers, fixes "explore pointers" and "chase pointers" for CompiledCode. Now you can chase pointers to symbols. Try it!! - Adds object dragging in ChangeSorter lists - Minor fixes in MethodFinder (aka. "Selector Browser") - Minor fixes in MessageTrace - Fix a bug with DebuggerMethodMap and full blocks (Sista V1 bytecode set). - Debugger now remembers last window extent to be restored in the next debugging session - Makes pluggable check-box morph compatible with UI themes - Makes the ProvideAnswerNotification handling more robust - Fixes in FileSaverDialog - Adds a 'new directory' button to DirectoryChooser and FileSaver dialogues. - Adds #browse to more code objects such as CompliedMethod, MethodReference, PackageInfo. Includes support for code versions. Preferences (Browser, Wizard) - Browser shows old-style preferences in a more readable way - Browser shows code snippet for each preference - Wizard offers to install extra packages - Wizard offers scroll bars for small displays - Fixes the visuals for radio buttons SUnit - Measures time-to-run during test execution, excluding time to set up test resources - Adds time-to-run and number-of-tests to test runner GUI - Fixes check for a secure internet connection - Reset all test resources during system-wide clean up. This should happen automatically during normal use of the test runner. - Adds TestRunner class >> #openForSuite:; which pre-selects all tests from the provided test suite. Nebraska - Cleans up message (extension) categories Services - Fixes a minor bug with the use of up/down arrow keys in the message list of an "inheritance (i)" browser, when #traceMessages and #reuseWindows are both active, and the inheritance window was already open but with a different method selected than the one it was invoked from. Shout (Syntax Highlighting) - Refactoring and performance improvement!! :-) - Fix a bug in SHMCClassDefinition>>sharedPools that answered nil as the pool for a missing pool - Removes the semaphore from Shout's background styling. It is not needed because we can synchronize with the current project's UI process using #addDeferredUIMessage:. - Adds context-dependent styling to all text editors including the debugger Debugger - In inspectors, retain custom expressions across receivers and contexts - In Inspectors, Improves syntax highlighting - Adds support for message removal ~~~ Version Control & Package Management ~~~ Installer (VersionNumber, UpdateStream, Squeak-Version) - Fixes bug in Metacello update code in Installer. Only occurred when calling #ensureRecentMetacello in an image that has Metacello installed already. - Auto-install Metacello if necessary when a Metacello load script is executed - Adds an OCompletion package-definition; also see PreferenceWizardMorph >> #installAutoComplete for a Metacello version Monticello - Refactors Monticello tools to directly use the ChangeSet class for accessing change sets. - Warn about false ancestors through a bold-red label in the GUI - Allow up to 3 attempts to access the repository, to allow for network slowness etc. Pass the exception up if we still don't get what we want. - Speeds up MCDefinitionIndex - Improves robustness for missing times in time stamps, needed to see the history of certain Balloon packages SqueakMap - Fix DNU when the creating first release of a SqueakMap package. - Fix SMPackageRelease >> #newerThan: to account for the possibility that the automaticVersion's its comparing might be from different branches, which can't be compared via #<. ~~~ Deployment & Misc. ~~~ Tests - There are now over 4500 tests in this release, which should run in less than 10 minutes. ReleaseBuilder - When building the release, remove all TrueType fonts except for Bitstream Vera (Sans/Sans Mono/Serif). - Fixes a minor issue in the release builder where deferred tasks and next tasks were mutually exclusive but should not. - Adds ReleaseBuilder class >> #prepareProcesses - Adds ReleaseBuilder class >> #saveAndQuit to restart the Morphic UI process Major Deprecations - Debugging interface in ToolSet changed, which also deprecates some #debug* messages - RunArray >> #addLast:times: - HTTPClient should not be used anymore in favor of WebClient. - StandardFileMenu should not be used anymore in favor of new file dialogs - HashedCollection >> #findElementOrNil: and #fullCheck - Symbol class >> #internCharacter:. There is no need for a character table anymore because all characters are immediate. - Object >> #notifyWithLabel: 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. - 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. - Some core packages depend on Etoys packages in this release. These depenencides will be removed in future releses - The UTF text converters might accept invalid character sequences - On some virtual machines a FloatTest can fail - The minimal window extent does not work for windows that use a proportional layout, which are propably all out there. - Note that there are workarounds for the mouse-down-focus issue regarding dialog invocation. Even though we have an unresolved issue in the Morphic event handling here, the rule of thumb is that you as an application developer should trigger such effects on #mouseUp:, not #mouseDown:. See the behavior of buttons in MS Windows or Apple's macOS. - In MVC projects, CMD+Dot cannot interrupt any high-priority, non-UI process. - In Morphic projects, CMD+Dot cannot interrupt any process with priority 60 or higher. Compatibility Notes - The deprecated classes ContextPart, BlockContext, and MethodContext are back but should not be used anymore in favor of Context. - The lookup of literals in code objects is now always thorough. - There is no #asReference anymore. Use #asCodeReference instead. - TextMorph >> #contents: does not reset wrapFlag or autoFit anymore. - For (pluggable) scroll panes through the tool builder, use optional scroll bars for both dimensions now. Ignore system-wide preferences because those usually address code-editing tools, not arbitrary programs. - Morph >> #cellInset: finally works as intended. Users should replace existing code with Morph >> #cellGap: if they experience any layout issues. - Heigh-for-width layouts should finally work as intended. Feel free to remove existing hacks around that. See Morph >> #changesHeightForWidth. ("\(^.^)/") ("\(^.^)/") ("\(^.^)/") !!!!!! THANK YOU ALL FOR YOUR CONTRIBUTIONS !!!!!! ("\(^.^)/") ("\(^.^)/") ! ]style[(32 69 11 101 7 72 9 289 18 2 12 6 19 18 4 54 3 61 3 21 2 6 125 32 37 7 4 8 61 13 56 27 143 24 82 5 127 31 12 7 33 29 83 7 41 15 153 25 69 17 5 16 3 11 8 16 53 23 124 19 5 20 106 19 51 33 146 22 239 6 40 16 40 22 42 14 232 10 41 11 17 34 27 42 3 192 8 27 57 32 63 30 2 8 312 12 33 6 85 11 32 16 36 24 2 8 51 12 18 15 52 14 185 4 51 7 33 16 192 5 99 15 2 7 131 9 39 9 44 41 2 9 111 54 541 3 56 31 2 5 45 33 105 11 17 5 24 6 77 23 27 18 196 22 2 4 197 7 41 5 44 11 111 6 54 11 20 21 40 16 134 34 94 11 61 36 31 12 418 8 50 13 804 11 5 15 126 7 33 5 11 18 256 1 251 5 71 35 2 7 17 12 165 4 139 23 165 17 69 31 551 25 2 43 31 10 178 15 5 11 104 28 35 11 147 7 305 25 149 16 33 7 113 29 239 6 237 8 80 34 61 8 45 8 114 14 5 13 134 27 3 44 274 7 11 7 45 9 72 1 83 44 2 55 167 9 77 18 11 45 26 10 444 9 73 31 142 26 2 5 22 10 61 14 234 41 8 36 39 18 26 7 136 9 60 16 59 33 25 15 78 12 76 10 25 23 95 4 4 9 8 3 55 22 24 18 51 9 147 3 214 9 205 17 164 3 9 18 229 19 123 7 30 12 65 16 12 23 76 24 159 20 68 18 150 31 12 1 2 1 17 1 2 1 17 1 2 1 76 1 2 1 17 1 2 1 8 2)b,,LDateAndTime Definition;,,RSistaV1;,,Rcode://#cleanUp:;,,b,,b,,b,,c187187187,bc187187187,,b,,bf5cgray;,,i,,Rcode://LargePositiveInteger >> #asFloat;,,LInteger Definition;,,LFraction Definition;,,Rcode://#isDeprecated;,,Rcode://BlockClosure >> #on:ensure:;,,Rcode://LargePositiveInteger class >> #thresholdForDiv21;,,Rcode://#sqrt;,,Rcode://#multiplyByInteger:;,,Rcode://Integer >> #*;,,Rcode://CompiledMethod >> #pragmasAt:;,,LPromise Definition;,,Rcode://Promise >> #reject;,,Rcode://Object >> #changeClassTo:;,,Rcode://MethodReference;,,Rcode://ClassReference;,,i,,Rcode://Text >> #format:;,,Rcode://String >> #findFeatures;,,Rcode://Collection >> #any:;,,Rcode://Collection >> #take:;,,Rcode://Collection >> #log2;,,Rcode://Collection >> #isOfSameSizeCheck:;,,Rcode://SequenceableCollection >> #=;,,LString Definition;,,LHashedCollection Definition;,,LSequenceableCollection Definition;,,LHtmlReadWriter Definition;,,i,,LDateAndTime Definition;,,Rhttp://wiki.squeak.org/squeak/6197;,,Rhttp://www.squeaksource.com/UTCDateAndTime;,,c000129000,,Rcode://Time class >> #highResClock;,,Rcode://Time class >> #nanosecondsToRun:;,,Rcode://BlockClosure >> #durationToRun;,,i,,i,,i,,i,,Rcode://PackageOrganizer >> #packageNamed:ifPresent:ifAbsent:;,,bf5cgray;,,i,,Rcode://Color banana explore;,,Rcode://Color >> #name;,,Rcode://Point >> #center:;,,Rcode://Form;,,i,,i,,i,,bf5cgray;,,i,,Rcode://FTPClient;,,i,,Rcode://Installer class >> #ensureRecentMetacello;,,i,,Rhttps://github.com/squeak-smalltalk/squeakssl/issues/5;,,i,,bf5cgray;,,i,,i,,i,,i,,i,,Rcode://String >> #findFeatures;,,Rcode://SystemNavigation >> #allClassesAndTraitsMatching:;,,bf5cgray;,,i,,i,,Rcode://World explore;,,Rcode://ActiveWorld explore;,,Rcode://#newWorldForProject:;,,LTableLayout Definition;,,Rcode://Morph >> #doLayoutIn:;,,Rcode://Morph >> #changesHeightForWidth;,,Rcode://PluggableTextMorph >> #textEdited:;,,LStringMorph Definition;,,Rhttps://wiki.squeak.org/squeak/1949;,,LDialogWindow Definition;,,Rcode://Morph >> #addFlexShell;,,Rcode://AbstractResizerMorph;,,Rcode://#haloForAll;,,Rcode://#metaMenuForAll;,,Rcode://BitBlt previewAllBitBltRulesWithAlpha;,,Rcode://BitBlt class >> #previewAllBitBltRulesWithAlpha;,,LAnimatedImageMorph Definition;,,b,,i,,bf5cgray;,,i,,i,,i,,Rcode://ClassBasedHelpTopic;,,Rcode://Project uiManager edit: Smalltalk license;,,Rcode://Behavior >> #openHelpBrowser;,,bf5cgray;,,i,,Rcode://#isDeprecated;,,LMorphicDebugger Definition;,,LMVCDebugger Definition;,,Rcode://Symbol browseFullProtocol;,,Rcode://Compiler evaluate: '3 + ?';,,Rcode://#foo explorePointers;,,Rcode://PluggableCheckBoxMorph;,,Rcode://Project uiManager chooseDirectory;,,Rcode://#browse;,,i,,i,,Rcode://TestResource class >> #cleanUp:;,,Rcode://TestRunner class >> #openForSuite:;,,i,,i,,Rcode://#traceMessages;,,Rcode://#reuseWindows;,,i,,c000157008,,Rcode://Context;,,Rcode://SHParserST80;,,i,,i,,bf5cgray;,,i,,Rcode://MetacelloStub;,,Rcode://Installer >> #oCompletion;,,Rcode://PreferenceWizardMorph >> #installAutoComplete;,,i,,i,,Rcode://SMPackageRelease >> #newerThan:;,,bf5cgray;,,i,,Rcode://TestRunner open;,,i,,Rcode://ReleaseBuilder class >> #prepareProcesses;,,Rcode://ReleaseBuilder class >> #saveAndQuit;,,b,,Rcode://ToolSet class;,,LWebClient Definition;,,Rcode://FileAbstractSelectionDialog;,,Rcode://Symbol class >> #internCharacter:;,,Rcode://#characterTable;,,b,,Rcode://TestRunner open;,,Rcode://Form >> #collectColors:;,,Rcode://Color class >> #colorFromPixelValue:depth:;,,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;,,Rcode://FloatTest>>#testTimesTwoPowerGradualUnderflow;,,Rcode://#getUserResponse;,,i,Rcode://#mouseUp:;,i,,b,,Rcode://Context;,,Rcode://CompiledCode;,,Rcode://#asCodeReference;,,Rcode://TextMorph >> #contents:;,,Rcode://#buildPluggableScrollPane:;,,Rcode://Morph >> #cellInset:;,,Rcode://Morph >> #cellGap:;,,Rcode://Morph >> #changesHeightForWidth;,,cblue;,bcblue;,cblue;,bcblue;,cblue;,bcblue;,cblue;,bcblue;,cblue;,bcblue;,cblue;,bcblue;,cblue;,bcblue;,cblue;,bcblue;,cblue;,bcblue;,cblue;,bcblue;,!