Я просматриваю старый (~ 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
функций .
Как человек с только начинающим пониманием библиотеки 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
(на другом языке) и какой может быть более обновленный подход.