Releases: JuliaGNSS/SignalChannels.jl
Releases · JuliaGNSS/SignalChannels.jl
Release list
v7.0.0
7.0.0 (2026-07-13)
- feat!: default to Matrix buffers with optional backing array type (dfd1e97)
Bug Fixes
- require PipeChannels 1.0.1 for the iterate/close race fix (a49755e)
- store matching buffers by reference in put! (zero-copy) (502e88b)
BREAKING CHANGES
- SignalChannel is now SignalChannel{T,N,M}; the default eltype
is Matrix{T} instead of FixedSizeMatrixDefault{T}. Code relying on take!
returning a FixedSizeMatrixDefault must construct channels with the explicit
backing type SignalChannel{T,N,FixedSizeMatrixDefault{T}} or adapt to Matrix{T}.
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
v6.2.2
v6.2.1
v6.2.0
v6.1.0
v6.0.0
6.0.0 (2026-01-08)
- refactor!: make SignalChannel{T,N} with compile-time channel count (afdebd7)
Bug Fixes
- update soapysdr_ext.jl test to use new SignalChannel{T,N} API (ebd2b52)
Features
- integrate rechunk into stream_data for flexible chunk sizes (b385343)
BREAKING CHANGES
- SignalChannel API changed from runtime to compile-time
channel count parameter.
Before: SignalChannel{T}(num_samples, num_channels, buffer_size)
After: SignalChannel{T,N}(num_samples, buffer_size)
This enables:
- Zero-allocation rechunking via compile-time loop unrolling
- Full type specialization throughout the signal processing pipeline
- ~2000 M samples/s throughput in benchmarks
Changes:
- SignalChannel{T} now defaults to SignalChannel{T,1}
- Added num_antenna_channels(chan) accessor function
- Updated RechunkState to use SignalChannel{T,N} type parameter
- Added compile-time API detection in benchmarks for backward compat
- Updated all tests and extensions for new API
🤖 Generated with Claude Code
Co-Authored-By: Claude Opus 4.5 noreply@anthropic.com
v5.0.0
5.0.0 (2026-01-05)
- refactor!: use PipeChannel instead of Channel for lock-free performance (a151677)
BREAKING CHANGES
- SignalChannel now uses PipeChannel internally instead of
Julia's built-in Channel. This provides zero-allocation performance in the
hot path but requires exactly one producer and one consumer thread.
Changes:
- SignalChannel now wraps PipeChannel instead of Channel
- Default buffer size changed from 0 to 16 (PipeChannel requires positive capacity)
- Removed rechunk_lockfree (now redundant since rechunk is lock-free)
- Removed locking methods (lock, unlock, trylock) as PipeChannel is lock-free
- Updated all tests and benchmarks to use PipeChannel for generic channel tests
- Added PACKAGE_VERSION support in benchmarks for version-aware testing
- PipeChannel now subtypes AbstractChannel{T} for compatibility
v4.0.1
v4.0.0
4.0.0 (2025-12-19)
- refactor!: remove put_or_close! in favor of bind for error propagation (24c4f3f)
BREAKING CHANGES
- put_or_close! is no longer exported. Use plain put!
instead - bind() handles error propagation when downstream closes.
The put_or_close! function was redundant - bind(in, task) already
handles error propagation when a processing task fails due to a
closed downstream channel. Simplified tee, rechunk, and membuffer
to use plain put! calls.
Added test verifying that errors propagate upstream via bind when
a downstream channel is closed.
🤖 Generated with Claude Code
Co-Authored-By: Claude Opus 4.5 noreply@anthropic.com