All notable changes to nimsync will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Moved 10 experimental modules (actors, streams, group, etc.) to
src/nimsync/experimental/ - Backward-compatible shims kept at old paths — existing imports unchanged
- Moved
BENCHMARKS.mdtodocs/ nimble benchnow points totests/performance/run_all_benchmarks.sh
- Version inconsistency:
VERSION.nimandnimsync.nimblenow both reflect v1.1.0 - Committed ELF binaries removed from git history (17 test/example binaries)
- Stale benchmark scripts in
scripts/removed (referenced deprecatedbenchmarks/dir) - Duplicate
docs/LICENSEremoved - Accidentally committed benchmark CSV results removed
- Deprecated root
benchmarks/folder (contents superseded bytests/performance/) src/nimasync_simple.nim— orphan file with typo in name, never exported
- MPSC (Multi-Producer Single-Consumer) channel mode
ChannelMode.MPSCenum value for multi-producer support- Wait-free MPSC algorithm using atomic fetchAdd (based on dbittman + JCTools)
- Comprehensive MPSC benchmark suite (tests/performance/benchmark_mpsc.nim, 316 lines)
- MPSC unit tests (tests/unit/test_mpsc_channel.nim, 259 lines)
- SPSC micro-benchmark: 558M ops/sec peak, 31ns P99 latency
- SPSC realistic threaded: ~35M ops/sec
- MPSC 2 producers: 15M ops/sec micro, ~15M realistic
- MPSC 4 producers: 8.5M ops/sec
- MPSC 8 producers: 5.3M ops/sec (memory-bandwidth limited)
- Key finding: SPSC is 3.5× faster than MPSC in realistic threaded workloads
- Updated README with MPSC usage examples and honest performance data
- Updated Nimble badge to v1.1.0
- Expanded performance documentation with micro vs realistic comparison
- Wait-free producer coordination via atomic CAS
- Cache-line padding prevents false sharing
- ORC-safe memory management, zero GC pauses
- Single consumer uses relaxed atomic operations
- Production-ready SPSC channels with verified performance
- 7-benchmark validation suite (Tokio, Go, LMAX Disruptor methodologies)
- Latency profiling: 20ns p50, 31ns p99, 50ns p99.9
- Published to official Nimble registry
- GitHub issue templates for contributors
- Peak micro-benchmark: 558M ops/sec
- Average across suite: 551M ops/sec
- Realistic threaded: ~35M ops/sec
- P99 latency: 31ns
- 0% contention under stress (500K ops)
- Async overhead: 512K ops/sec (Chronos wrappers)
- BENCHMARKS.md with methodology
- Performance validation in tests/performance/
- Roadmap updated to show v1.0.0 complete
- Honest disclaimers about micro vs realistic performance
- Added test binaries to .gitignore
- Async channels now actually work - Previous implementation was completely broken
- Fixed
send()/recv()to use actual SPSC implementation (was referencing non-existent fields) - Removed duplicate Channel/ChannelMode type definitions
- Added exponential backoff (1ms → 100ms) to reduce CPU usage
- Fixed Chronos deprecation warnings
- Fixed
- Deduplicated channels.nim - Removed 100+ lines of duplicate code
- Now properly imports from channel_spsc instead of reimplementing everything
- Comprehensive async channel tests (tests/unit/test_async_channel.nim)
- Added async tests to CI workflow
- Updated KNOWN_ISSUES.md to reflect async improvements
Downgraded from v1.0.0 to v0.2.0 to accurately reflect what's production-ready.
- SPSC Channels: 212M+ ops/sec verified
- Tests passing: tests/unit/test_channel.nim
- Benchmark verified: tests/performance/benchmark_spsc.nim
- TaskGroup (has bugs, removed from exports)
- Cancellation (untested, removed from exports)
- All other features remain internal/experimental
- Version: 1.0.0 → 0.2.0
- README.md: Replaced with honest version
- Build: "production" → "experimental"
- STATUS.md: Feature audit
- CI workflow: Test + benchmark validation
- CHANGELOG.md: This file
- KNOWN_ISSUES.md: Documented bugs and limitations
- Async send/recv use polling (exponential backoff)
- TaskGroup: nested async macro bugs (not exported)
- Actors: won't compile, needs MPSC
- Streams: compiles but untested
- Scheduler: fake (just metrics)
- NUMA: broken node detection
See KNOWN_ISSUES.md for complete list.
Premature release. Use v0.2.0 instead.
Retracted because:
- Claimed features that don't work
- TaskGroup exported but broken
- Examples showed inaccessible API
- No CI validation