202509300044
Pre-release
Pre-release
·
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 fromVMMaker-Simulationpackage - 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.
- 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
0as factor butnilis 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.