Swift泛型是否单独编译?

时间:2014-09-18 16:03:28

标签: generics swift

我正在试图找出Swift仿制药的工作原理。具体来说,我没有找到关于编译模型的精确陈述。在C ++中,泛型(模板)不是单独编译的,因为它们为每个调用站点实例化(至少在原理上)。相反,Java泛型是单独编译的。 Swift的情况是什么,涉及单独编写泛型?

2 个答案:

答案 0 :(得分:4)

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

  

Swift可以直接运行通用代码

     

优化程序可以随意生成通用代码的专用版本

     
      
  • 单独编写泛型
  •   
  • 编译速度更快
  •   
  • 灵活地交换代码大小以提高速度
  •   

答案 1 :(得分:1)

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