Versienotities voor Squeak 6.1 "Vanessa"

Hoogtepunten van deze release

  • Nieuwe tree browser: Maakt navigatie door klassen en categorieën mogelijk via vernieuwde hiërarchische morphs.
  • Terugkeer van Objectland: Ook bekend als de "Worlds of Squeak".
  • Kerninfrastructuur: Diverse wijzigingen en fixes voor het simuleren, unwinden en plannen (scheduling) van processen, evenals het hervormen van klassen.
  • Toolset en gebruikersinterface: Diverse verbeteringen aan tools voor inspectie, debugging, profiling en versiebeheer van code.

---

Gedetailleerde verbeteringen in taal, tools en omgeving

GUI Frameworks

Morphic (tot Morphic-ct.2218 / MorphicTests-ct.97)

Grote herziening van tree morphs:

  • Verbeterde kleuren en sneltoetsen voor muis en toetsenbord bij het navigeren door bomen.
  • Herziening van de 'type-to-filter' functie (vergelijkbaar met lijsten), markering van zoektermen en mogelijkheid om via [TAB] in enkele kolommen te zoeken. Er is een configureerbare filtermodus toegevoegd voor het zoeken binnen de huidige selectie, alle zichtbare knooppunten of de gehele boom.
  • Introductie van een recursieve "zoek"/"zoek opnieuw" functie via [CMD] + [F] / [CMD] + [G].
  • Toevoeging van een vlag voor automatische uitbreiding van bomen.
  • Verbeterde ondersteuning voor drag-and-drop door knooppunten automatisch uit te breiden na één seconde hoveren tijdens het slepen.
  • Stabiliteits- en prestatieverbeteringen voor lay-out, rendering en event-handling in bomen.
  • Ondersteuning in de 'world' voor het droppen van klassenreferenties, systeem- en methodecategorieën, en inspector/explorer-velden om deze in een nieuw venster of widget weer te geven.

Overige GUI wijzigingen:

  • Muisinteracties: Nieuwe voorkeuren voor het aanpassen van de dubbelkliktijd en drag-drempels.
  • Venstermenus: In het menu van de docking bar is een optie toegevoegd om vensters in te klappen. De functie "find workspace" is verbeterd door het geselecteerde venster uit te vouwen als dit was ingeklapt. Het helpmenu is herordend en gedecoreerd.
  • Teksteditors: Links worden nu onderstreept tijdens hoveren; klikken en tekstselectie via links is gemakkelijker gemaakt. Bij het omhullen van een selectie met enkele of dubbele aanhalingstekens worden geneste quotes nu automatisch ge-escape/unescaped.
  • Morphic API: Morphs kunnen nu individuele halo-events uitsluiten en ballontekst via een block specificeren in plaats van een selector.
  • Menuconstructie: Nieuwe utilities voor het toevoegen van itemgroepen en het tijdelijk schakelen van actiedoelen. #addList: interpreteert backslashes in help-tuples nu als regelafbrekingen. Trailing lines tussen menu-items worden automatisch verwijderd.
  • Debugmenu's: De debugmenu's van diverse morphs zijn herzien met een time-profiler sneltoets voor knoppen en snellere toegang tot lijst- en boominhoud.

UI-tweaks en stabiliteit:

  • Verbeterde themaondersteuning voor voortgangsbalken, tekstmorph-menu's en dialoogvensters.
  • Verbeterde high-DPI ondersteuning voor knoppen, scroll panes, sliders, menu's, multi-selectielijsten, bomen, schaduwen, de scratch pad en de keyboard exerciser.
  • Verbeterde meertalige ondersteuning.
  • Fixes voor: wereld-display depth menu, klokconfiguratie, zoekbalk print-its, project view styling en transcript counting.
  • Opgelost probleem waarbij user events werden genegeerd tijdens het profilen van code.
  • diverse layoutfixes voor proportionele layouts, tekstmorphs en transformatiemorphs.
  • Verbeterde stabiliteit van tekstselectie in tekstmorphs en aanpassingen in indentatie bij lege regels.

MorphicExtras (tot MorphicExtras-ct.360)

  • Objectland: Een reconstructie van de "Worlds of Squeak" uit 2003, met een collectie voorbeelden die de mogelijkheden van Squeak demonstreren. Inclusief de klassieke Etoys racecar en nieuwe voorbeelden.
  • BlobMorph: Herintroductie en update van de bekende BlobMorph.
  • Webcams: Toevoeging van een spiegeloptie, uitbreiding van de interface voor double-buffering en verbeterde stabiliteit van de webcam morph.
  • Overig: Verbeteringen aan het instrumentmenu van score players en high-DPI ondersteuning voor de objects tool (event recorders, score players, etc.).

Etoys (tot EToys-ct.532)

  • Herstel en herziening van de tutorial over schilderen en scripts maken in Etoys.
  • Toevoeging van een undo-knop aan FreeCell.
  • Verbeterde statusindicatie in Tetris.
  • Verbeteringen aan de players gallery, de spectrum analyzer en de midi input morph.
  • High-DPI ondersteuning voor iconen, tile morphs, script editors, games en kalenders.

ST80 (tot ST80-mt.311)

  • Toevoeging van een 'sluit'-item aan het world menu.
  • Verbeterde high-DPI ondersteuning voor systeemweergaven.
  • Nieuwe functie View>>imageForm voor screenshots van weergaven, zichtbaar in inspectors.
  • Sneltoets [CMD] + [SHIFT] + [D] toegevoegd voor "debug it".

CommandLine (tot CommandLine-eem.27)

  • Herstel van de voorkeur "Save snapshot of image on failure".
  • Verbeterde UIManager ondersteuning voor bestandsdialogen, font-dialogen en bevestigingen.

---

Programmering & Tools

Tools (tot Tools-mt.1366 / ToolsTests-ct.137)

  • Nieuwe Tree Browser: Toont systeemcategorieën, klassen en berichtcategorieën in hiërarchische panelen en integreert Monticello-pakketten. Bevat vijf nieuwe voorkeuren voor het uiterlijk.
  • Drag'n'drop: Herziening voor tree browsers en traditionele browsers om alle zinvolle combinaties van panelen te ondersteunen bij het kopiëren of verplaatsen van klassen, methoden en categorieën.
  • Hiërarchie-browsers: Ondersteuning voor dubbelklikken om de centrale klasse te wisselen (nuttig bij multi-inheritance met traits).
  • Inspector: Uitbreiding van ondersteuning voor custom fields; objecten kunnen nu eigen inspector-velden en menu-items bijdragen. Mogelijkheid om truncatie uit te schakelen bij grote collecties.

Debuggers:

  • Nieuwe "send until..." commando's om nauwkeurig naar condities in geneste methodaanroepen te zoeken.
  • Verbeterde "run to here" functionaliteit voor expressies in blocks.
  • Toevoeging van een byteCodes-modus in de debugger om individuele VM-instructies te bekijken en door te stappen via een nieuwe "simulate"-knop.

Overige Tool-verbeteringen:

  • Integratie van AndreasSystemProfiler in de trunk.
  • In workspaces is een optie "load contents from file..." toegevoegd aan het venstermenu.
  • Verbeterde herstelmodus voor wijzigingen (change recovery), inclusief betere parsing van klassedefinities en methodeverwijderingen.

ToolBuilder (tot ToolBuilder-Kernel-ct.176 / etc.)

  • Ondersteuning voor blocks in ToolBuilderSpec>>help: en PluggableMenuItemSpec>>action:.
  • Verbeterde UIManager met nieuwe methoden zoals inform:title: en chooseFileFrom:[...].
  • Morphic-specifiek: Bestandsdialogen bevatten nu een adresbalk. Modellen in lijsten en bomen kunnen nu bepalen of ze een gedropt object accepteren op basis van het item waarover wordt gehoverd.

SUnit (tot SUnit-mt.153 / etc.)

  • Time-outs worden nu aangegeven in TestResult en getoond in de test runner.
  • Fixes voor testgeneratie bij #// selectors.

Nebraska (tot Nebraska-ct.65)

  • Ondersteuning voor muiswiel-scrollen in remote terminals.
  • Verbeterde betrouwbaarheid van event handling, waardoor terminals weer vrij kunnen worden verplaatst, vergroot en geroteerd.

Shout (Syntax Highlighting) (tot ShoutCore-ct.98 / ShoutTests-eem.34)

  • Commentaren worden standaard cursief weergegeven (instelbaar via voorkeuren).
  • Verbeterde parsing van unaire selectors die beginnen of eindigen met underscores.

---

Kernlanguage (Core Language)

Kernel (tot Kernel-ct.1688 / KernelTests-ct.482)

  • Getallen: Nieuwe functies zoals Complex>>log, Integer>>bitInvert64, Integer>>timesCollect:, Number>>timesTwoPower: en ScaledDecimal>>printFractionAsDecimal. Correcties voor #sin, #cos en #tan bij zeer grote gehele getallen.
  • Blocks: Ondersteuning voor non-local exits met waarden via BlockClosure>>valueWithExitValue.
  • Debugging & Simulatie: Diverse edge cases van de context simulator zijn opgelost, wat de robuustheid verbetert bij het debuggen van het systeem vanuit zichzelf. Ondersteuning voor recursieve process-faithful debugging (het debuggen van een debugger die een derde debugger debugt).
  • Processen & Scheduling: Verbeterde documentatie en afhandeling van procesbeëindiging en stack unwinding. Process>>destroy veroorzaakt nu geen VM-crash meer bij geblokkeerde processen.
  • Promises: Nieuwe helpers voor het combineren van promises (#all:, #anyOne:, #race:). Promise>>value is nu een synoniem voor #wait.
  • Klassen: De snelheid van het (her)bouwen van klassen is met meer dan 30% verhoogd door gebruik van het MethodMassage pakket.

Collections (tot Collections-ct.1115 / CollectionsTests-ct.419)

  • Veel nieuwe gemaksvoorzieningen voor enumeratie, kopiëren en modificeren van collecties en streams.
  • Introductie van AlternativeSortFunction voor sortering op basis van binaire predicaten.
  • Teksten: Verbeterde HTML-parsing (ondersteuning voor <blockquote, betere whitespace handling voor <p>, <div> en <pre>). Ondersteuning voor base32 encoding/decoding.

Chronology (tot Chronology-Core-ct.98 / Chronology-Tests-ct.40)

  • Tijdzones zijn omgezet naar een uitbreidbare klassenhierarchie voor DST-bewuste zones (zoals TZ-Olson).
  • Herstel van ANSI-compliance voor DateAndTime>>offset:.

Compiler (tot Compiler-ct.535)

  • Mogelijkheid om #pvt* selectors naar super te sturen, waardoor private methoden in subklassen kunnen worden overschreven of uitgebreid.
  • Nieuwe optionele voorkeur voor interactieve waarschuwingen bij variable shadowing.

MethodMassage (tot MethodMassage-ct.75)

  • Dit nieuwe pakket in de trunk maakt het mogelijk om gecompileerde methoden te disassembleren als first-class objecten, ze te inspecteren/herschrijven en weer samen te stellen.

---

Grafische weergave & Geluid

Graphics (tot Graphics-nice.562)

  • Ondersteuning voor basis CSS-kleurfuncties voor betere HTML-parsing.
  • Toevoeging van dithering voor het vloeiend verlagen van de kleurdiepte van forms.
  • Ondersteuning voor schermdimensies van meerdere monitoren.

Sound (tot Sound-ct.102)

  • Accessors toegevoegd voor het opsommen en instellen van beschikbare geluidsspelers en recorders.
  • Bestandsdienst toegevoegd voor het lezen van AIFF-bestanden.

---

Bestanden & Netwerk

Files (tot Files-mt.223)

  • Voorkeur toegevoegd om het changes bestand in het image te cachen in plaats van op disk, waardoor een Squeak image als standalone bestand kan draaien.
  • Toegang tot systeemomgevingsvariabelen en de huidige werkmap van de VM.
  • Op Linux/Unix ondersteuning voor tilde (~) pad-expansie naar de home directory.

Network (tot Network-nice.289 / NetworkTests-pre.80)

  • Verbeterde IPv6-ondersteuning, nu standaard ingeschakeld.
  • Bestandsdiensten toegevoegd voor het bekijken van EML-bestanden als e-mails.
  • SMTP-client uitgebreid met nieuwe commando's (verify, quit) en CRLF injection detectie.

WebClient & JSON (tot JSON-ul.68 / etc.)

  • Ondersteuning voor handmatige verwerking van OPTIONS requests door webservers (nodig voor CORS preflight).
  • In het JSON-pakket is een nieuwe utility toegevoegd voor navigatie langs paden in JSON-achtige objecten.

---

Systeemdiensten

System (tot System-ct.1522)

  • Ephemerons: Introductie van ephemerons die instance-based finalisatie ondersteunen, wat een grote verbetering is ten opzichte van WeakArrays. Dit lost problemen met zwakke indirecte cyclische afhankelijkheden bij garbage collection op.
  • Clipboard: Herziening van uitgebreide clipboard interfaces; het plakken van rich text vanuit het host-systeem wordt nu op alle OS'en ondersteund.

Regex (tot Regex-Core-ct.93 / Regex-Tests-Core-ct.38)

  • Ondersteuning voor Unicode literals (\x41, \u{1F388}), character class escapes (\p{N}, \P{Lu}), named capturing groups en non-capturing groups.
  • Implementatie van leftmost-longest matching (POSIX stijl) via een optionele vlag.

FFI (Foreign Function Interface)

  • Ontwikkeling van een threaded versie van de OpenSmalltalk VM voor primitives en FFI callouts in de achtergrond.
  • Ondersteuning toegevoegd voor ARM64 en varargs in C-declaraties.

---

Versiebeheer & Pakketbeheer

Installer & Monticello (tot Monticello-ct.822 / etc.)

  • HTTPS: Ondersteuning voor HTTPS-schema's toegevoegd; source.squeak.org en squeaksource.com gebruiken nu HTTPS.
  • Monticello: Toevoeging van "file out theirs" aan het patch-lijstmenu.

---

Help & Internationalisering

Help (tot HelpSystem-Core-ct.159 / etc.)

  • Inhoud: Nieuwe tutorial over bijdragen aan Squeak, inclusief het communitymodel en het ontwikkelproces.
  • Systeem: Gebruikers kunnen nu custom help-topics beheren via de help browser zonder code te schrijven (via contextmenu of drag-and-drop).

---

Deployment & Diversen

Tests (tot Tests-ct.522)

  • Deze release bevat meer dan 5800 tests die in minder dan 3 minuten draaien op CI.

---

Belangrijke Deprecations (Verouderde functies)

Squeak streeft naar achterwaartse compatibiliteit, maar de volgende wijzigingen zijn doorgevoerd:

  • Debuggers: Project-specifieke debugger subklassen (MorphicDebugger en MVCDebugger) zijn verwijderd; custom debuggers kunnen nu weer direct overerven van Debugger.
  • BrokenPromise: Wordt gedeprecereerd. Bij een rejected promise zullen Promise>>wait etc. nu de originele exception opnieuw signaleren.
  • Naamswijzigingen:
  • Promise>>error is hernoemd naar #errorValue.
  • ClassDescription>>[all]MethodsInCategory: is hernoemd naar #[all]SelectorsInCategory:.

---

Bekende Problemen (Known Issues)

  • Debugger notifiers vanuit achtergrondprocessen kunnen verschijnen met een uitgeschakelde "Proceed"-knop.
  • In zeldzame gevallen kan recursieve process-faithful debugging leiden tot oneindige loops.
  • Reguliere expressies behandelen greedy patterns binnen lookbehinds incorrect.
  • Het draaien van een HTTPS-server via SqueakSSL werkt momenteel niet op Linux en macOS.
  • Op Linux (Wayland) kunnen tekstmorphs hun focus verliezen bij elke klik.

---

Compatibiliteitsnotities

  • Promise>>value wacht nu op de receiver (voorheen gaf het nil terug tot de receiver was opgelost).
  • Matrix-operaties (#with:do:, #with:collect:, etc.) signaleren nu een fout bij size-mismatches in plaats van deze te negeren.
  • In het helpsysteem wordt de sortBlock voor FileBasedHelpTopic en DirectoryBasedHelpTopic nu ook toegepast op mappen en recursief doorgegeven aan submappen.