BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Swift标准库的发展

| 作者 Sergio De Simone 关注 18 他的粉丝 ,译者 王庆 关注 1 他的粉丝 发布于 2016年3月8日. 估计阅读时间: 2 分钟 | ArchSummit北京2018 共同探讨机器学习、信息安全、微服务治理的关键点

根据Apple正在编写的一份文档所述,Swift的一个主要设计目标是确保代码高效执行的同时还能对实现进行加载期抽象。Apple的设计文档提供了与库设计者相关的信息,包括Swift标准库。

Swift标准库设计者面临的一个主要亟待解决的问题是保证未来客户端与现有库之间的兼容性(向前兼容),现有客户端与未来版本的库之间的兼容性(向后兼容)。

要解决这个问题只需要确保公有的方法接口不变,保证当底层实现代码修改时暴漏给使用者的接口仍然有效即可。

关于苹果正在推进标准库发展的讨论意在影响Swift的设计和功能,使得库设计者们能在满足向兼容与向后兼容的同时不要因为加载时的检查而付出太多的成本。

Apple的文档定义了一套解决方案来帮助库设计者们实现这一目标:

  • 使用版本控制的API,确保用户想使用某一个特定版本的API时可以限制仅当该版本API可用时调用。
  • 仅允许不会破坏兼容性规则的改动。为此苹果在每发布一个新版本的库时都会通过文档标明所有确定无误的改动点。这样的改动点包括修改一个方法的实现,修改一个内部参数名,或者是给参数加上了默认值。另外一些改动则是不允许的,例如改变一个方法的通用要求,或者是改变参数的顺序,Apple的库不仅仅对方法做了标识,也包括结构体、枚举、协议、类、扩展等等内容的描述。

此外,Apple还说追求加载时抽象从优化的角度看是有一定的性能损耗的。的确,许多的优化都依赖于这个功能的真正实现,即它有没有访问全局内存、一个struct里的成员的个数等,因此我们在开发过程中做向前兼容或者向后兼容时一定要尽力避免这样的优化。

还有一些其他关注点:使用了内联代码,但它应该被当做当前模块外的代码,因为它最终会在客户的模块里执行;本地可用性环境,会影响“#available”对函数体的作用方式;对类型的约束,比如说声明一个类型是“trivial”,或者定义它的最大“size_in_bits”等等。

如前面所提到的,文档是Apple工作过程中的产物和一些基本改动点的总结,但如果你是一名Swift开发者还是应该多关注文档。

查看英文原文:The Evolution of Swift's Standard Library

感谢张龙对本文的审校。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT