Rust traits 有运行时开销吗?
Do Rust traits have runtime overhead?
如果我在下面的代码中创建类型为 Concrete1
的 c1
,是否会有任何运行时开销?
pub trait ExampleTrait {
fn foo(&self);
}
pub struct Concrete1 {}
impl ExampleTrait for Concrete1 {
fn foo(&self) {}
}
pub struct Concrete2 {}
impl ExampleTrait for Concrete2 {
fn foo(&self) {}
}
fn main() {
let c1 = Concrete1 {};
c1.foo();
}
这是否需要任何类型的 v-table 查找或任何其他类型的开销?我想要一个特征,以便我可以在编译时强制执行 Concrete1
和 Concrete2
实现同一组方法。
我会静态选择在主程序中使用哪个具体类型;这两个实现的存在只是为了让我可以在需要时使用该特征的替代实现。
如果静态知道具体类型,则使用静态分派。
如果具体类型未知(即特征对象:&dyn ExampleTrait
),则使用动态调度。
另请参阅:
如果我在下面的代码中创建类型为 Concrete1
的 c1
,是否会有任何运行时开销?
pub trait ExampleTrait {
fn foo(&self);
}
pub struct Concrete1 {}
impl ExampleTrait for Concrete1 {
fn foo(&self) {}
}
pub struct Concrete2 {}
impl ExampleTrait for Concrete2 {
fn foo(&self) {}
}
fn main() {
let c1 = Concrete1 {};
c1.foo();
}
这是否需要任何类型的 v-table 查找或任何其他类型的开销?我想要一个特征,以便我可以在编译时强制执行 Concrete1
和 Concrete2
实现同一组方法。
我会静态选择在主程序中使用哪个具体类型;这两个实现的存在只是为了让我可以在需要时使用该特征的替代实现。
如果静态知道具体类型,则使用静态分派。
如果具体类型未知(即特征对象:&dyn ExampleTrait
),则使用动态调度。
另请参阅: