jorgecarleitao opened a new pull request #9076:
URL: https://github.com/apache/arrow/pull/9076


   This PR refactors `MutableBuffer::extend_from_slice` to remove the need to 
use `to_byte_slice` on every call, thereby removing its level of indirection, 
that does not allow the compiler to optimize out some code.
   
   This is the second performance improvement originally presented in #8796 
and, together with #9027 , brings the performance of "MutableBuffer" to the 
same level as `Vec<u8>`, in particular to building buffers on the fly.
   
   Basically, when converting to a byte slice `&[u8]`, the compiler lost the 
type size information, and thus needs to perform extra checks and can't just 
optimize out the code.
   
   This PR adopts the same API as `Vec<T>::extend_from_slice`, but since our 
buffers are in `u8` (i.e. a la `Vec<u8>`), I made the signature
   
   ```
   pub fn extend_from_slice<T: ToByteSlice>(&mut self, items: &[T])
   pub fn push<T: ToByteSlice>(&mut self, item: &T)
   ```
   
   i.e. it consumes something that can be converted to a byte slice, but 
internally makes the conversion to bytes (as `to_byte_slice` was doing).
   
   Credits for the root cause analysis that lead to this PR go to @Dandandan, 
[originally fielded 
here](https://github.com/apache/arrow/pull/9016#discussion_r549110164).
   
   > [...] current conversion to a byte slice may add some overhead? - 
@Dandandan


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to