17-分发
4.6.1 分发
分发是一个从面向对象编程范式中借鉴的概念,主要用于描述被称为多态的上下文中的一种特性。在面向对象程序设计(Object-Oriented Programming,OOP)中,当API是泛型或者接收实现为接口的参数时,必须弄清楚参数在传递给API的类型实例上调用什么方法实现。多态的上下文中的方法解析过程被称为分发,调用该方法被称为分发化(dispatching)。在支持多态的主流语言中,分发可以通过以下任意一种方式进行。
- 静态分发 :当在编译期决定要调用的方法时,它被称为静态分发或早期绑定。方法的签名用于决定调用的方法,所有这些都在编译期决定。在Rust中,泛型展示了这种形式的分发,因为即使泛型函数可以接收许多参数,也会在编译期使用具体类型生成函数的专用副本。
- 动态分发 :在面向对象的语言中,有时直到运行时才能确定调用的方法。这是因为具体类型被隐藏,并且只有接口方法可用于调用该类型。
在Java中,当函数只有参数时就是这种情况,即接口。
这种情况只能通过动态分发来处理。在动态分发过程中,可通过对 vtable 接口的实现列表进行查找,并调用该方法来动态确定相关方法。vtable是一个函数指针列表,指向每个类型的实现方法。由于方法调用过程中存在额外的间接指针引用,所以这需要更多的资源开销。
接下来让我们探讨特征对象。