Passing a `BitSpan` is generally better because then the caller is not forced to allocate the bits with a `BitVector`. Also, the `BitSpan` can be stored in the stack, which removes one pointer indirection compared to accessing bits through a `BitVector &`.