我正在查看一些旧的(~2014 年)Rust 代码,我看到了这个代码块:
fn compile(self, func:&UncompiledFunction<'a>) -> &'a Val {
unsafe {
use std::raw::Repr;
use std::mem::transmute as cast;
let slice = self.repr();
let ty = <&'a str as Compile<'a>>::get_type();
let structure = Val::new(func, &ty);
let offset_data = cast::<_, usize>(&slice.data) - cast::<_, usize>(&slice);
let offset_len = cast::<_, usize>(&slice.len) - cast::<_, usize>(&slice);
func.insn_store_relative(structure, offset_data, func.insn_of(mem::transmute::<_, isize>(slice.data)));
func.insn_store_relative(structure, offset_len, func.insn_of(slice.len));
structure
}
}
根据文档和这个 GitHub 讨论 std::raw::Repr
,并std::raw::Slice
已被弃用,取而代之的是std::slice
functions。
作为对 std 库只有初学者了解的人,我不确定如何从上面的块中翻译这些特定的行:
let slice = self.repr(); // `self` here is a `static str`
let offset_data = cast::<_, usize>(&slice.data) - cast::<_, usize>(&slice);
let offset_len = cast::<_, usize>(&slice.len) - cast::<_, usize>(&slice);
我正在查看文档,Repr
希望能与std::slice
家庭中的某些功能进行类比,但对我来说没有什么是立即清楚的。
我希望有人可以向我解释究竟是什么Repr
(用不同的语言)以及更新的方法可能是什么。