泛型沉思录:创建模版与使用模版生成代码
模版--》实现
泛型不会降低编译后的代码量。
所有实现都是编译器根据模版生成代码;
创建模版-〉复制(创建)类型-》使用类型。
一、泛型与语言
1、泛型只是语言(复用)层面的概念;
2、机器码和汇编没有泛型的概念;
3、语言处理过程(编译和解释)中,泛型会解释为具体的类型(数据类型和函数类型)。一个泛型经过编译器或解释器后,在可执行文件和运行时会存在多个具化副本。
二、泛型与具化
1、显式具化;
2、类型推导具化(根据函数参量、返回值具化)。
3、所有的具化方式在逻辑上都基于显式具化。
三、类型推导
1、基于泛型实现的类型推导
调用形式,推导出泛型的显式具化方式,进而由编译器推导编译为具体的实现方式。
2、基于泛型接口的推导
这种推导方式在函数时编程中常用。
高阶函数定义了实现函数的接口,实现函数根据需求具体定制。
其推导链条由如下方式:
高阶(泛型)函数—(参量)—>
高阶函数—(调用)—>
组件函数—(根据上下文)—>
推导参量类型—>
(实现)—根据参量类型实现具体功能
程序语言设计的过程中,Go 明显遇到了这样一个问题,是想要让程序员干活变慢,还是让编译器变慢,还是要运行速度变慢,或者更大的编译后的二进制文件。
https://www.zhihu.com/question/62991191
我思故我在