Skip to content

Tags: jeffhuen/RustyCSV

Tags

v0.3.7

Toggle v0.3.7's commit message
Fix version: use 0.3.7 (Cargo doesn't support 4-part versions)

v0.3.6

Toggle v0.3.6's commit message
Update Cargo.lock for v0.3.6

v0.3.5

Toggle v0.3.5's commit message
Eliminate all unsafe from application code and bump to v0.3.5

- Replace hand-rolled enif_make_sub_binary FFI with rustler's safe
  Binary::make_subbinary().into() API (enabled by upstream PR #719)
- Remove CLMUL (x86_64) and PMULL (aarch64) std::arch intrinsics from
  SIMD scanner; use portable shift-and-xor cascade on all targets
  (benchmarked with no measurable difference on 15MB/100K-row workloads)
- Pin rustler dependency to git master pending 0.37.3 hex release
- Update README, ARCHITECTURE, BENCHMARK, and CHANGELOG docs

The only remaining unsafe is the GlobalAlloc trait impl behind the
opt-in memory_tracking feature flag (benchmarking only, not for
production use).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

v0.3.4

Toggle v0.3.4's commit message
Add Rust nightly to CI workflow

CI clippy and cargo test need nightly for portable_simd feature.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

v0.3.3

Toggle v0.3.3's commit message
Harden NIF safety and bump to v0.3.3

Replace all unwrap() calls in production Rust NIF code with match +
early return, enforce with cfg_attr(not(test), deny(clippy::unwrap_used,
clippy::expect_used)). Add cargo clippy and cargo test to CI. Add
property-based tests (StreamData) and concurrent access tests. Update
all moduledocs to document dirty CPU scheduling, concurrency safety,
and dedicated rayon thread pool.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

v0.3.2

Toggle v0.3.2's commit message
Harden NIF safety and bump to v0.3.2

Five internal safety fixes, all on by default with zero configuration:

- Mutex poisoning recovery: streaming NIFs raise :mutex_poisoned instead
  of panicking the VM when a previous call panicked under the lock
- Dirty CPU scheduling: 12 NIFs that process unbounded input now run on
  dirty CPU schedulers to avoid blocking normal BEAM schedulers
- Sub-binary bounds check: make_subbinary validates start+len<=input_len
  with debug_assert and a release-mode empty-binary safety net
- Dedicated rayon thread pool: parallel parsing uses a named rustycsv-*
  pool instead of the global rayon pool, avoiding contention
- Bounded streaming buffer: 256 MB default cap with :buffer_overflow
  raise, configurable via :max_buffer_size option

Also fixes Error::Term -> Error::RaiseTerm so buffer overflow and mutex
poisoning actually raise exceptions instead of silently returning error
tuples. Adds 12 new streaming safety tests and fixes a flawed assertion
in edge_cases_test.exs that could never fail.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

v0.3.1

Toggle v0.3.1's commit message
Fix Rust formatting in general strategy

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

v0.3.0

Toggle v0.3.0's commit message
Bump version to 0.3.0 and fix all linter warnings

- Version bump to 0.3.0 in mix.exs, Cargo.toml, README, CHANGELOG
- Fix clippy: collapse else-if in zero_copy.rs, use &[u8] over &Cow
- Fix cargo fmt across all Rust source files
- Fix credo: reduce cyclomatic complexity by extracting quote blocks
  into separate functions, alphabetize aliases, use sigils for strings
- Fix mix format across Elixir source files

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

v0.2.0

Toggle v0.2.0's commit message
Bump to v0.2.0

### Added
- `:zero_copy` strategy using BEAM sub-binary references
- SIMD-accelerated row boundary scanning via memchr3
- mimalloc high-performance allocator (enabled by default)
- Optional memory tracking via `memory_tracking` Cargo feature
- Comprehensive benchmark suite with honest methodology

### Changed
- Memory tracking now opt-in (removes ~5-10% overhead when disabled)
- `:parallel` strategy threshold updated to 500MB+ (based on crossover testing)
- Documentation updated with accurate benchmark claims (3.5x-18x speedups)
- "High-performance" → "Ultra-fast" branding

### Fixed
- Benchmark methodology: fair streaming comparison, honest memory metrics
- Corrected claims about NimbleCSV capabilities in README

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

v0.1.2

Toggle v0.1.2's commit message
Bump to v0.1.2, make nimble_csv dev-only

- Remove lib/rusty_csv/nimble.ex (benchmark-only code)
- Move nimble_csv to dev/test dependency

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>