2014-09-18 62 views
4

我想弄清楚Swift泛型是如何工作的。具体而言,我无法找到关于编译模型的精确声明。在C++中,泛型(模板)并不是单独编译的,因为它们被实例化(至少原则上)用于每个调用站点。相反,Java泛型是分别编译的。 Swift的情况如何,关于单独编写仿制药?Swift的泛型是否分别编译?

+0

我似乎记得今年在其中一个WWDC高级会议视频中讨论了这个问题。不能更具体,虽然对不起:) – 2014-09-18 16:16:38

回答

3

这是两者的组合,具体取决于优化器决定哪些内容会获得更好的性能。他们在WWDC Session 404: Advanced Swift结束时谈论它。幻灯片说:

斯威夫特可以运行通用代码直接

优化可以随意产生的通用代码专门版本

  • 仿制药的单独编译
  • 更快的编译
  • 灵活性用于速度的贸易码大小
1

从语义上讲,它类似于C++的方式。在使用T参数化的Swift通用函数中,可以在运行时直接使用T(如T.self)访问事物。您也可以在C++中执行此操作,但不能在Java中执行此操作,此时泛型只能在编译时和类型擦除之后进行。