Skip to content

202509300044

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 Oct 07:40
· 53 commits to Cog since this release

Release Candidate Version 2025 (for updated Squeak 6.0/5.3 bundles; prospectively also Cuis 7 and the upcoming Squeak 6.1)

Update notes are based on the commit messages since Cog-eem.455 and VMMaker.oscog-eem.3347. Also see update map update.oscog-mt.13, which corresponds to this tag (which is based on Cog-eem.502 and VMMaker.oscog-eem.3662).

  • Adds support for ARMv8 JIT on Windows platforms
  • Adds VM parameter 51; a set of bit flags describing the load-status of the such as "swizzled/relocated" and "embedded" (parameter is read-only; later Cog VMs only; otherwise nil)
  • Adds primitive 150 (BoxedFloat64>>primitiveCosine)
  • Adds primitive 560 (SmallFloat64>>primitiveCosine)
  • Adds #primitiveRenderAllScanlines and #primitiveGetAllStats to speed-up font rendering (BalloonEngine)
  • Adds #primitiveGetWorkingDirectory and #primitiveSetWorkingDirectory (FilePlugin)
  • Adds #primitiveCogitMethod for method introspection (custom VM build via #VMInvestigations option)
  • Adds #primitiveMethodIsCogged for method introspection (custom VM build via #VMInvestigations option)
  • Fixes memory growing when the first attempt fails
  • Fixes issue in BMPReadWriterPlugin
  • Fixes issue in #primitiveShowDisplayRect when using bad arguments
  • Fixed issue in FFI plugin / ThreadedFFIPlugin on Apple (ARM64) silicon regarding varargs
  • Fixes issue in FFI plugin / IA32ABIPlugin (#primAllocateExecutablePage)
  • Fixes issue in FFI plugin regarding two-register-struct return convention (SysV x86_64 ABI)
  • Fixes and improvements in several Slang translation rules
  • Fixes an older regression regarding large-integer support in V3 images (i.e. Squeak 4.6 and before)
  • Fixes an older regression regarding #primitiveFullGC (garbage collection)
  • Fixes issues around ephemeron support
  • Fixes issue in primitive 83 (#perform: etc.; jitted version)
  • Fixes issue in primitive 60 (#digitAt:; 64-bit Spur)
  • Fixes issues in JIT code generation (64-bit and 32-bit ARM)
  • Fixes range issue in primitive 51 (#truncated in BoxedFloat64)
  • Fixes issues in support for AndreasSystemProfiler
  • Updates VectorEnginePlugin (Cuis 7 support)
  • Updates ImmX11Plugin (no effect)
  • Updates support for threaded FFI callouts (only multi-threaded VM)
  • Updates support for embedded images (i.e. embedded in the VM executable)
  • Updates FloatMathPlugin primitives (no production effects expected)
  • Updates BoxedFloat64 primitives 51 to 58 for increased performance
  • Updates in AsynchFilePlugin
  • Updates in FilePlugin
  • Updates in BitBltPlugin
  • Updates in Sista interpreter (inlining)
  • Updates and improves primitive 176 (maxIdentityHash) in Cogit for better performance, e.g., in dictionary lookup
  • Updates and improves identity hash pseudo-random number generator for object hashes (old: variation on D.H. Lehmer's linear congruential generator; new: Marsagalia/Brent xor & shift linear feedback shift register)
  • Updates and improves method-cache flushing (Spur only)

🔧 VMMaker Dev Notes

  • Adds support for deferred disassembly, i.e. from data exported by #primitiveCogitMethod; allows display of the contents of a method jitted in the production VM rather than the simulator
  • Adds support for breakpointing the creation of TMethods
  • Adds more robustness in simulated plugin loading
  • Adds support for simulating more FFI-related things (e.g. arg marshalling, callout)
  • Adds variant of CoInterpreter with LiveTyping support (for custom builds)
  • Adds #findClassNamed: (Spur only)
  • Adds #essential: pragma complementing #option: and #nonOption:
  • Fixes regression in CogMethod header printing
  • Fixes simulation of system attribute 1003 (processor name)
  • Fixes simulation of several interpreter methods
  • Fixes simulation of #firstIndexableField: uses (issues noticeable in font rendering)
  • Fixes simulation of BalloonEnginePlugin (B2DPlugin)
  • Fixes simulation of VectorEnginePlugin
  • Fixes regression in Slang regarding method inlining (only threaded VM)
  • Fixes type inference in Slang
  • Updates ProcessorSimulatorPlugin with new disassembly primitives
    GdbARMv8Alien
  • Updates disassembly in CogProcessorAliens
  • Updates disassembly of CogMethod
  • Updates assembly tokenizer (for all processor simulators)
  • Updates Spur32to64BitImageConverter
  • Updates tooling for inspecting recent CPU registers
  • Updates dev tooling for simulating ARM-based processors
  • Updates dev tooling for Ephemerons and Weaklings (print-strings)
  • Updates dev tooling to use ARM Ltd. standard terminology in debugging tools
  • Updates dev tooling around Sista
  • Updates simulation of #getAttributeString:
  • Updates simulation of high-dpi images to make #ioScreenScaleFactor configurable
  • Updates overall commentary
  • Updates Slang tests
  • Updates and partially rewrites Slang transpiling and inlining strategies (e.g. makes <inline: #always> effect foreseeable, adds <inline: #first> )
  • Updates and improves Pragmatizer
  • Updates and improves high-dpi support for VMMakerTool
  • Updates and generalizes process-logging support (i.e. push up from CoInterpreter to StackInterpreter)

🚧 Compatibility notes

  • Pre-built Linux binaries require GLIBC_2.35, which means Ubuntu 22.04 or later
    • For older systems, please build the VM on your own
    • We will happily help out; just ask on the vm-dev mailing list
  • On macOS, a restart of the VM is required after installing SqueakFFI for the first time
    • Otherwise, modules and function addresses cannot be loaded
  • (VMMaker) RawBitsArray >> byteAt: is now expected in the base Squeak image (i.e. Squeak 6.1alpha and later) because it was removed from VMMaker-Simulation package
  • On Windows, the CameraPlugin is now part of the release because we now build with the Windowns 10 SDK, not mingw-w64. Both ways are still supported for custom builds.

⚠️ Known issues

  • On macOS, the full-screen primitive 233 will crash the VM because a corresponding platform call is made from the wrong thread.
  • On macOS, setting the Squeak window size via HostWindowPlugin will result in strange behavior on Retina displays because of a regression in the plugin.
  • On Windows, changing physical monitors might result in a debugger and a tiny font (i.e. 75 % scale factor) because of the possibility that platform code reports a 0 as factor but nil is the convention for "I do not know".

ℹ️ Info on VM flavors

  • cog.spur (32/64-bit, has JIT, ARM or Intel, Squeak 5.0 and later)
  • stack.spur (32/64-bit, no JIT, ARM or Intel, Squeak 5.0 and later)
  • cog.v3 (32-bit, has JIT, ARM or Intel, Squeak 4.6 and before)
  • stack.v3 (32-bit, no JIT, ARM or Intel, Squeak 4.6 and before)

If you want to compile the sources that are attached here, put the sqSCCSVersion.h from here into platforms/Cross/vm.