We are happy to announce the availability of Soil version 5.
What is new?
Automatic change tracking: Soil now computes a recursive content hash for
objects and uses it to detect modifications automatically. This removes the
need for the explicit markDirty: calls that were previously required —
something we called out as a goal back in the v4 announcement.
Read-only transactions have been hardened: we now distinguish a transaction
that is intentionally read-only from one that just happens to end up with no
changes, and read-only transactions abort automatically instead of committing a
no-op.
Indexed collections (SoilPersistentDictionary and indexed dictionaries) can now
be used as non-root objects, not just at the root of the database.
A first working garbage collector has landed — a preview, not a finished
feature: Soil>>garbageCollect compacts object segments offline by cloning and
atomically swapping them in. There's also a new opt-in Soil>>checkConsistency
you can run separately without slowing down the GC itself. The data-layer
primitives for a future online/segment-based GC are also in place, though not
yet wired up.
A new SoilCommitError hierarchy lets you catch any commit-time failure with one
exception class instead of several unrelated ones.
A good number of crash and silent-data-corruption fixes, notably around the
graph exporter/importer, backup version history, and depth-first traversal.
Full changelog:
https://github.com/ApptiveGrid/Soil/blob/main/docs/versions/changelog-v5.md
I also wrote up the release on the blog, with a bit more context:
https://norbert.hartl.name/blog/2026-07-29_soil-v5-released.html
What is planned next?
Integrating the Windows support work that's already sitting there
Process-specific variables
A preview of an online GC, building on the primitives that landed in v5
Multi-index collections and partial indexes (carried over from v4's plan)
Hope you like it. Give it a spin and then tell us!
Norbert & Marcus
_______________________________________________
Pharo-dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]