Prompt
Always consider the time and space complexity implications of your code. Choose data structures and algorithms that minimize computational overhead and memory usage for your specific use cases.
Watch for hidden complexity issues:
-
Avoid nested iterations that create O(n²) behavior
// Poor: Iterates through all buffers on each call, potentially O(n²) in a loop let n = bufs.iter().map(|b| b.len()).sum::<usize>().min(MAX_BUF); // Better: Calculate incrementally inside a loop to maintain O(n) complexity let mut remaining = MAX_BUF; let mut total = 0; for buf in bufs { let to_copy = buf.len().min(remaining); total += to_copy; remaining -= to_copy; if remaining == 0 { break; } } -
Choose efficient operations over expensive ones
// Poor: Using power operation which is more expensive let max_number = 2u64.saturating_pow((8 * length_field_len - 1) as u32); // Better: Using bit shift which is much faster let max_number = match 1.checked_shl(8 * length_field_len) { Some(shl) => shl - 1, None => u64::MAX, }; -
Design for fairness when consuming from multiple sources
// When polling multiple streams, implement rotation strategies to ensure // fair processing and prevent starvation: let mut added = 0; let mut start = thread_rng_n(entries.len() as u32) as usize; while added < limit { match self.poll_one(cx, start) { Poll::Ready(Some((idx, val))) => { added += 1; // Move the start index to ensure fair rotation start = idx.wrapping_add(1) % entries.len(); // Process val... } _ => break, } } -
Use iterators over index-based access when appropriate
// Poor: Using index-based access in a loop let expiration_time = (0..wheel_count) .filter_map(|id| wheel.get_sharded_wheel_mut(id).next_expiration_time()) .min(); // Better: Using iterator methods directly on the collection let expiration_time = wheels.iter_mut() .filter_map(|wheel| wheel.next_expiration_time()) .min(); -
Avoid code duplication that leads to excessive monomorphization
// Poor: Duplicating implementation for each function call type pub fn with_func1(cmd: &mut Cmd, with: impl Fn(&mut Cmd) -> Result<Child>) -> Result<Child> { // Duplicated implementation } // Better: Extract common logic to avoid recompiling the same code pub fn with_func(cmd: &mut Cmd, with: impl Fn(&mut Cmd) -> Result<Child>) -> Result<Child> { handle_common(&mut with(cmd)?) } fn handle_common(child: &mut Child) -> Result<Child> { // Common implementation that won't be duplicated }
By paying attention to these efficiency concerns, you’ll produce code that scales better and uses resources more efficiently.