探索 Rust 中的动态调度
本文档翻译自博客Exploring Dynamic Dispatch in Rust
我是 rust
世界的新手(尽管到目前为止我很喜欢 rust
),所以如果我犯了技术错误,请告诉我,我会尽力纠正它们。 现在让我们开始吧。
我研究动态调度的真正动机可以在下面的代码片段中看到。 假设我想创建一个包含特征对象向量的结构 CloningLab
(在本例中为 Mammal
):
1 | struct CloningLab { |
这工作正常。 您可以遍历主题向量并按照您的预期调用 run 或 walk。 但是,当您尝试向 trait 对象添加额外的 trait 时,代码就会崩溃,例如:
1 | struct CloningLab { |
会输出以下的错误信息:
1 | error[E0225]: only the builtin traits can be used as closure or object bounds |
我发现这很令人惊讶。 在我看来,具有多个边界的特征对象类似于 C++ 中的多重继承。 我希望该对象对每个“基础”都有多个 vpointer,并通过适当的 vpointer 进行调度。 鉴于 rust 仍然是一门年轻的语言,我可以理解为什么开发人员可能不想立即引入这种复杂性(永远被糟糕的设计所困将是高昂的代价而回报却很少),但我想弄清楚如何 这样的系统可能工作(或不工作)。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 邱维东!
评论