Changes for version 0.11 - 2026-09-19

  • Add wake_init, wake_take, wake_fd and wake_drained to the C ABI (4).
  • Add map_incr_ttl to the C ABI and ttl => to Map->incr: a fixed window in one call.
  • Add rate_counts to the C ABI.
  • Add map_incr_at to the C ABI (5): map_incr_ttl on the caller's clock.
  • A counter under the stripe lock is a load and a store, not an atomic add.
  • Publish SA_READ_*, SA_MAP_STORE_*, SA_CACHE_*, SA_ERR_* and SA_TYPE_* in sa_abi.h.
  • Add Shared::Arena::_region_ptr.
  • A drain or claim at a hole never sleeps; Cursor->drain takes wait => 0.
  • A publish walks only the wakers that have pipes, and no registry when there are none.
  • The peer row is written with stores on publish, not read-modify-writes.
  • Deadlines read CLOCK_REALTIME_COARSE where it exists.
  • FIXES a region with a lease refusing wakers: the registry compared reserved names only up to their leading NUL.

Modules

memory two processes can both read, without a syscall
a shared set that answers "no" exactly and "yes" probably
a shared cache that evicts instead of refusing
how often a key has been seen, in fixed space
a shared set that answers "no" exactly, "yes" probably, and can forget
one structure, published once and read in place by every process
read a published block without copying it
a distribution every process adds to at once
how many distinct, in a few kilobytes
one holder at a time, and a successor when it dies
a fixed-capacity map several processes share
a token bucket per key, shared by every worker
a record queue several processes can write at once
one reader's position in a ring
one record to one member of the pool
one row per worker, published live