Hacker News new | ask | show | jobs
by orlp 1260 days ago
> That said, the pop implementation seems faulty in that it does not appear to deallocate empty chunks. Does Rust have any non-obvious magic here?

No, the only magic here is my utter lack of testing for throwaway HN code :) A corrected implementation would be:

    pub fn pop(&mut self) -> Option<T> {
        let last = self.chunks.last_mut()?;
        let ret = last.pop()?;
        if last.is_empty() {
            self.chunks.pop();
        }
        Some(ret)
    }
This is only correct if we maintain the invariant that we do not keep any empty chunks around, but the rest of the implementation does not violate this.