如果不是为了物体安全,Rust会有什么安全保障?

时间:2016-07-12 01:10:18

标签: rust

我试图了解对象安全的想法。我从文档中了解到,对象安全是指:

  • 该特征不需要Self: Sized
  • 所有方法都是对象安全的

如果物体安全所需的两个条件中的任何一个被取消,那么可以想象可以导致安全生锈的安全失败的事情可以实现吗?

1 个答案:

答案 0 :(得分:8)

来自Where Self Meets Sized: Revisiting Object Safety

  

只有当编译器可以自动为它自己实现时,trait才是对象安全的,方法是通过存储在trait对象中的vtable将每个方法实现为动态函数调用。

     

如果没有对象安全规则,可以编写具有特征对象满足的类型签名的函数,其中内部使得无法实际使用特征对象。

我相信选择"对象安全"回想起来可能是一个糟糕的人,因为它似乎与记忆安全无关,正常使用术语"(un)safe"在Rust。

对象"能力"可能更接近事实;能够通过特征对象引用的特征。