https://doc.rust-lang.org/nomicon/borrow-splitting.html
‣
collect处理result
let inputs: Vec<i64> = vec![0, 1, 2, 3, 4];
let result: Vec<u8> = inputs
.into_iter()
.map(|v| <u8>::try_from(v).unwrap())
.collect();
// 改成这种方式,获取result,但仍然很麻烦
let result: Vec<Result<u8, _>> =
inputs.into_iter().map(|v| <u8>::try_from(v)).collect();
// collect也可以用?来处理
let result: Vec<u8> = inputs
.into_iter()
.map(|v| <u8>::try_from(v))
.collect::<Result<Vec<_>, _>>()?;
bounds checking
通过一些方式来告诉编译器消除bounds checking,可以有效提升性能。典型的,用slice代替vector,用len()来限制index的范围,这样编译器就可以聪明的识别出来index总是在有效范围内,它就会聪明的去掉bounds checking
https://shnatsel.medium.com/how-to-avoid-bounds-checks-in-rust-without-unsafe-f65e618b4c1e