[提案] 显式特化

主要观点:提出引入@specialize属性以更好控制泛型性能,能在编译时为特定类型生成预特化函数版本,避免因类型擦除导致的性能损失。
关键信息

  • @specialize属性可用于函数,需在where子句中完全特化类型,可用于多种函数类型如协议扩展、计算属性等。
  • 特化版本能针对特定类型优化代码,如直接操作数组缓冲区等,未特化版本在类型信息缺失时性能较差。
  • 此提案只涉及内部特化,对 ABI 无影响,可应用于现有 ABI 稳定函数,未来可考虑将特化公开等方向。
    重要细节
  • 示例中对求和数组元素的函数进行特化,不同类型的特化代码不同,如Array<Int>的特化代码。
  • 讨论了部分特化、使特化公开、要求特化及工具方向等未来发展方向,如部分特化可避免为不同类型重复特化,使特化公开可避免暴露实现细节等。
  • 考虑了其他替代方案,如全程序分析自动确定预特化等,且该提案基于 Swift 当前的分发机制。
阅读 8
0 条评论