Swift 中协议见证表和 vtable 有什么区别?

Mic*_*iak 5 swift

我试图理解 swift 的 vtable 和见证表之间的区别。理论上,它应该是允许动态分派类方法的相同机制。SIL 文档包含两个段落,表明这些段落有所不同。但这对我来说有点困惑。

那么,这两者到底有什么区别呢?

小智 3

根据我的理解,正如你所说,vtable 允许动态分派类方法。该表是在编译时生成的。

另一方面,见证表允许动态分派泛型类型,因此该表有所不同,因为它需要映射泛型条目以实现相同的结果:动态分派。这些表包含编译器用来“生成运行时调度表”的信息。该信息未在编译时定义。如果您检查文档,见证表会映射基本协议、它所需的方法以及关联类型及其协议一致性(关联类型的)。

不确定我是否正确理解你的问题?