写点什么

Swift 标准库的发展

2016 年 3 月 07 日

根据 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

感谢张龙对本文的审校。

2016 年 3 月 07 日 18:001346

评论

发布
暂无评论
发现更多内容

「架构师训练营」第 3 周作业

邓江川。

单例及组合模式实践

WulalaOlala

设计模式 极客大学架构师训练营

单例模式和组合模式

Arvin

设计模式-单例&组合

Z冰红茶

ARTS 第 3 周

乌拉里

十万同时在线用户,需要多少内存?——Newbe.Claptrap 框架水平扩展实验

newbe36524

架构师训练营 第3周总结

Lingjun

极客大学架构师训练营

第三周总结

胡江涛

极客大学架构师训练营

架构师训练营 - 第 02 周学习总结

Eric

架构师训练营 第3周作业

Lingjun

极客大学架构师训练营

重学设计模式之单例模式

设计模式 单例模式 Singleton

Feign Client 原理和使用

公众号:好奇心森林

Spring Boot HTTP

week3 命题作业

任小龙

搞定 HTTP 协议(三):如何严谨地描述一个 HTTP 报文?

零和幺

https HTTP

信息的表示与存储-整数的运算

引花眠

计算机基础

Raft探索历程--Part1

老胡爱分享

分布式协同 raft

第三周作业

胡江涛

极客大学架构师训练营

技术学习进阶(死磕法)

dudu

学习 技术

Week 03 学习总结 代码重构

Z冰红茶

易纲:上海可以在人民币自由兑换等方面先行先试

CECBC区块链专委会

数字货币 区块链技术 金融科技中心

138 张图带你 MySQL 入门

cxuan

MySQL 数据库

模式与重构

满山李子

Spring 源码学习 - @Async注解实现原理

公众号:好奇心森林

Spring Boot aop

区块链中的“链上”和“链下”

CECBC区块链专委会

区块链技术 分布式身份标识 难以篡改

架构师训练营-第 03 周作业提交

Eric

极客大学架构师训练营

设计模式练习及感想(训练营第三课)

看山是山

设计模式 极客大学架构师训练营

设计模式学习总结

qihuajun

架构师训练营第 3 周 _ 课后作业

方舟勇士

课程作业

ARTS打卡 第4周

引花眠

ARTS 打卡计划

架构师训练营-第 03 周总结

Eric

极客大学架构师训练营

架构师训练营-第 02 周作业

Eric

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

Swift标准库的发展-InfoQ