作者回复: 👍
作者回复: 都是好问题。 问题1:这句话来自于Russ Cox 的“泛型窘境”的文章。不知道你对c++的编译过程了解怎样。像c/c++这样的源码的编译分为两个阶段:编译和链接。其中编译阶段是以.c/.cpp为编译单元,将源码编译为一个个.o文件,每个编译单元的编译都是独立的。因此如果一个泛型函数在多个编译单元都会被调用(比如实参是int),那么每个编译单元编译时都会为int生成一份独立的泛型函数代码,这样就拖慢了编译器的编译时间。之后在链接阶段,链接器才会将位于各个.o中的这些冗余的重复代码进行清除,只保留一份。 问题2:调用泛型函数时传入的实参肯定是实参类型啊。这块编译器会将其转换为特定的函数调用,比如:f(dict.float64, 3.14)。至于具体实现,https://github.com/golang/proposal/blob/master/design/generics-implementation-dictionaries.md 这个proposal design给出了一个伪码的例子,可以看看那个。
作者回复: 👍
作者回复: 👍。
作者回复: ELF 是 Executable and Linkable Format的缩写。是linux上一种标准的可执行文件的格式。
作者回复: 👍