Apple的一个正在编撰中的文档表明,swift的一个设计初衷是允许程序运行时的加载时抽象能高效执行。Apple的设计文档提供了与库设计者相关的信息,包括swift标准库。
swift标准库设计者面临的一个主要亟待解决的问题是保证未来客户端与现有库之间的兼容性(向前兼容),现有客户端与未来版本的库之间的兼容性(向后兼容)。
要解决这个问题只需要确保公有的方法接口不变,保证当底层实现代码修改时暴漏给使用者的接口仍然有效即可。
关于苹果正在推进标准库发展的讨论意在影响swift的设计和功能,使得库设计者们能在满足向兼容与向后兼容的同时不要因为加载时的检查而付出太多的成本。
Apple的文档定义了一套解决方案来帮助库设计者们实现这一目标:
此外,Apple还说追求加载时抽象从优化的角度看是有一定的性能损耗的。的确,许多的优化都依赖于这个功能的真正实现,即它有没有访问全局内存、一个struct里的成员的个数等,因此我们在开发过程中做向前兼容或者向后兼容时一定要尽力避免这样的优化。
还有一些其他关注点:使用了内联代码,但它应该被当做当前模块外的代码,因为它最终会在客户的模块里执行;本地可用性环境,会影响“#available”对函数体的作用方式;对类型的约束,比如说声明一个类型是“trivial”,或者定义它的最大“size_in_bits”等等。
如前面所提到的,文档是Apple工作过程中的产物和一些基本改动点的总结,但如果你是一名swift开发者还是应该多关注文档。
查看英文原文: The Evolution of Swift's Standard Library
感谢张龙对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群 (已满),InfoQ读者交流群(#2) )。