waitfree-sync 0.4.0

A collection of wait-free data structures
Documentation
# Changelog

All notable changes to this project will be documented in this file.

## [Unreleased]

## [0.4.0] - 2026-07-30

### Added

- Add an MSRV check to CI
- Detect when the other half of the SPSC queue has been dropped: `Sender::try_send` returns `SendError::ReceiverSideDropped` and `Receiver::try_recv` returns `TryRecvError::Disconnected`.

### Changed

- [**breaking**] Replace `NoSpaceLeftError` with a `SendError` enum with `NoSpaceLeft` and `ReceiverSideDropped` variants, returned by `Sender::try_send`
- [**breaking**] `Receiver::try_recv` now returns `Result<T, TryRecvError>` instead of `Option<T>`, distinguishing an empty queue (`TryRecvError::Empty`) from a disconnected `Sender` (`TryRecvError::Disconnected`)
- Bump dependencies

### Fixed

- Fix Miri and Loom tests to correctly account for the drop behavior of the SPSC queue

## [0.3.3] - 2026-05-18

### Added

- Add `len()` and `is_empty()` methods to the SPSC queue
- Add SPSC benchmarks

### Changed

- Raise the minimum supported Rust version (MSRV) to 1.81
- Replace the `affinity` dev-dependency with `core_affinity` to fix minimal-versions builds

## [0.3.2] - 2025-10-21

### Changed

- Add badges to the README
- Improve documentation

## [0.3.1] - 2025-10-10

### Changed

- Improve documentation
- Fix a missing `mut` in an example
- Include the README in the crate metadata
- Exclude the `.github` directory from the published crate

## [0.3.0] - 2025-10-09

### Fixed

- [**breaking**] Rename `size()` to `capacity()` on `Sender` and `Receiver`

## [0.2.1] - 2025-10-07

### Added

- Clean up the internal structure and remove an unneeded raw pointer
- Add a `peek` method to the SPSC receiver

### Fixed

- Remove an unnecessary `Sized` trait bound
- Correctly drop the old value in the triple buffer under loom
- Fix remaining loom test failures

## [0.2.0] - 2025-09-12

### Added

- Add a `read()` method to the triple buffer writer
- Add a size option for the SPSC queue
- [**breaking**] Provide the SPSC capacity as a function parameter instead of a const generic

### Changed

- Add more documentation
- Rename methods to match the standard library channel API

### Fixed

- Fix a memory leak caused by `Option` inside `UnsafeCell`
- Remove an unnecessary write guard
- Fix a missing `Some()` wrapping under loom
- Fix test naming for loom
- Fix a failing loom test
- Fix clippy lints
- Fix missing renames in loom code and documentation
- Fix documentation errors