A data race that doesn't compile
5 hours ago
- #Parallel Computing
- #Redux Pattern
- #Rust Type System
- The author explores using Rust's type system to prevent data races in a parallel Redux-like library (ruxe), originally designed for high-volume event processing in energy management systems.
- A key insight is replacing the negative condition "no duplicate slice reducers" with a positive formulation: ensuring a bijection between state slices and reducers, which is easier to encode in Rust's trait system.
- Using HList (heterogeneous lists) and the Sculptor pattern from the frunk crate allows compile-time walking of slice and reducer lists to enforce uniqueness via trait resolution errors.
- Peano numerals (Here and There<I>) serve as positional witnesses to disambiguate recursive trait impls, crucial for avoiding overlapping implementations during reducer lookup.
- The final implementation compiles only when each state slice has exactly one matching reducer, preventing parallel data races at compile time without runtime checks.