这些方法使用动态调度(接收一个 trait 对象&Debug
作为参数):
这些方法使用静态调度,并根据相关entry
方法编写:
为什么第一个方法列表使用动态调度而不是静态调度?如果使用静态调度,它们的使用会受到限制吗?
这些方法使用动态调度(接收一个 trait 对象&Debug
作为参数):
这些方法使用静态调度,并根据相关entry
方法编写:
为什么第一个方法列表使用动态调度而不是静态调度?如果使用静态调度,它们的使用会受到限制吗?
静态调度使用单态化,这会导致为每个具体类型创建单独的代码副本。
当您有一个与许多具体类型一起使用的函数时,您可能会在编译时产生很大的损失来创建和优化所有这些版本。即使在这些情况下单态化不会增加性能,这种情况也会发生。
相反,您可以选择使用trait object,它创建代码的单个实现(for &Trait
)。
这些方法是作为RFC 640的一部分添加的,但讨论似乎没有提到这方面。事实上,它们最初是用静态调度实现的。直到后来他们才被更改为接受一个 trait 对象:
重组调试构建器以最小化代码生成
从通用边界切换到 trait 对象并使用未内联的内部方法应该会减少 Debug 实现的大小,因为我们关心 Debug 实现的速度不如二进制膨胀。