Rustで高速にsliceの一部をCloneする
TL;DR
Rustで配列をコピーしたいとき、実際問題何をするのが早いのかという話です。
結論だけ書いておくと、clone_from_sliceを使えばいいはずです。
clone_from_sliceの実装を読む
clone_from_slice
実装は以下です。spec_clone_fromを読んでいるだけです。
spec_clone_from
spec_clone_fromが何者なのかという話ですが、Tのオーバロード的なことをしている関数です。オーバロードっぽいことはtraitを使うことで実現できます(参考)。
T: Cloneの場合は普通にcloneして、T: Copyの場合はcopy_from_sliceを呼びます。
copy_from_slice
ptr::copy_nonoverlappingを呼びます。そのためのsafetyの確認も行われています。ptr::copy_nonoverlappingはだいたいmemcpyなので、Copy traitが必要です。
結論
ということで、clone_from_sliceを呼べばよしなにやってくれるらしいです。
明示的にやりたい場合は、ptr::copy_nonoverlappingでもいいですが、unsafeは可能なら呼びたくないので、copy_from_sliceを呼ぶのがいいと思います。