- 主要内容:介绍了在 Rust 中处理类型相关问题的过程,包括将标准库类型替换为自定义类型时出现的编译错误,以及对“Subtyping and Variance”概念的探索和解决方法。
关键信息:
- 在 Rust 插件系统系列中,将 Tremor 的类型与 FFI 兼容时遇到问题,如使用
abi_stablecrate 替换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,消除BorrowOwnedtrait,使类型协变,解决了编译错误。
- 在 Rust 插件系统系列中,将 Tremor 的类型与 FFI 兼容时遇到问题,如使用
重要细节:
Cow<'a>用于在运行时持有借用或拥有的值,以提高性能。- 介绍了一些关于“Subtyping and Variance”的资源,如 The Rustonomicon、The Rust Reference 和 Wikipedia 等。
- 详细描述了各种尝试解决问题的方法及其遇到的困难,如 GATs 无法使类型协变,
transmute存在安全隐患等。 - 提到了
abi_stablecrate 的作者 Rodri 提出的修复方案,并给出了简化版本的代码。 - 指出 Rust 1.62.0 开始在错误消息中提供相关文档,但理解整个主题仍然困难。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。