技术笔记:Rust 特征对象布局

主要观点:Rust 中值和引用有区别,本周了解到该区别在 trait 对象中的新情况。
关键信息:

  • 介绍了动态大小类型如 [u8][u8; 40] 及相关概念。
  • 阐述了 trait 对象如 dyn Read 及其布局,与 C++对象和虚表的对比。
  • 提到 trait 对象的强制转换,如 let r: &dyn Read = &f;
  • 指出另一种与泛型相关的 trait 强制转换,如 let r: &BufReader<dyn Read> = &b; 及其底层规范原因。
  • 说明 Box<File>Box<dyn Read> 的强制转换及相关魔法特质。
    重要细节:
  • y: &usize = &xyusize 的引用,其具体值是指针。
  • [u8] 是未知大小字节序列,常通过 &[u8] 交互。
  • struct Test<X:?Sized> { inner: X, }Test<[u8]> 是动态大小类型。
  • trait 对象 dyn Read 布局与所包装的值相同,常通过引用交互。
  • &mut T 可隐式转换为 &T,在 trait 对象中也有类似强制转换。
  • BufReader<File> 内部的 File 可强制转换为 trait 对象。
  • 关于 BoxRc 替代 BufReader 时不编译的原因未明确说明。
阅读 7
0 条评论