- 主要内容:介绍了在 Rust 中处理类型相关问题的过程,包括将标准库类型替换为自定义类型时出现的编译错误,以及对“Subtyping and Variance”概念的探索和解决方法。
关键信息:
- 在 Rust 插件系统系列中,将 Tremor 的类型与 FFI 兼容时遇到问题,如使用
abi_stable
crate 替换std
类型后出现大量编译错误,其中 70 个与生命周期有关。 - 发现
Cow<'a>
和RCow
在比较时出现生命周期不匹配错误,虽能通过引入新的生命周期参数'b
修复部分PartialEq
相关的错误,但Ord
相关的错误无法解决。 - 在 Rust Discord 服务器的帮助下,了解到“Subtyping and Variance”概念,
RCow
和Cow
的差异在于BorrowOwned<'a>
trait,RCow
是不变的,而Cow
是协变的,需要使RCow
协变才能解决问题。 - 尝试了多种方法来解决问题,如使用 GATs、
transmute
和摆脱BorrowOwned<'a>
,最终通过引入新的泛型参数O
,消除BorrowOwned
trait,使类型协变,解决了编译错误。
- 在 Rust 插件系统系列中,将 Tremor 的类型与 FFI 兼容时遇到问题,如使用
重要细节:
Cow<'a>
用于在运行时持有借用或拥有的值,以提高性能。- 介绍了一些关于“Subtyping and Variance”的资源,如 The Rustonomicon、The Rust Reference 和 Wikipedia 等。
- 详细描述了各种尝试解决问题的方法及其遇到的困难,如 GATs 无法使类型协变,
transmute
存在安全隐患等。 - 提到了
abi_stable
crate 的作者 Rodri 提出的修复方案,并给出了简化版本的代码。 - 指出 Rust 1.62.0 开始在错误消息中提供相关文档,但理解整个主题仍然困难。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。