swift3.0的改变

  Swift在这2年的时间内,发展势头迅猛,在它开源后,更是如井喷同样,除了 iOS、mac 平台,还支持了 Linux。 而今年下半年, Swift 3.0 也会随之发布。https://github.com/apple/swift-evolution详细介绍了3.0的特性git

 

  这个版本的主要目标加强语言的二进制接口和标准库的稳定性,做为这个过程的一部分,咱们将改善swift语言以提供在体验和执行(feel and implementation)的总体的一致性,Swift 3.0将包含2个对2.X source-breaking的改变,更具体地说,这个版本集中在几个关键领域:github

  1、稳定的ABI(Stable ABI)算法

  提供了稳定的ABI以保证能够向前兼容,这涉及到运行时的数据结构,名称矫正(name mangling),调用约定(calling conventions)等等,swift

  稳定的ABI也延伸到标准库,它的数据类型,和核心算法。成功的ABI的稳定性意味着未来的swift版本的应用程序和库的编译能够在swift3.0二进制级别的应用程序和库,即便源语言的发生变化。数据结构

 

  2、极强的扩展适应能力,为后续的版本打好基础(Resilience)app

  所谓易碎接口嘛,是现代程序语言的一个通用问题,它的全称叫作 Fragile Binary Interface。 简单来讲呢,就是 Swift 以及当前的大多数主流开发语言中的类的属性,在底层都是经过偏移来访问的,好比book.name, 咱们在程序中访问一个对象的属性很是直观。 但他在编译后,其实是这样的形式location(book) + offset(name)。访问 name 属性是经过 book 对象所在的内存地址加上一个偏移来实现的。ide

那么 Swift 中的类在编译后,会将它全部的属性的偏移值也都计算出来。这样会加快程序在运行时的执行速度,由于不须要在运行时再计算这些偏移量了。若是全部的类之间没有任何关联就不会有什么问题,但在实际中,咱们使用类都会有继承关系。假如咱们的主项目中引用了一个外部的库,咱们主程序中继承了这个外部库中的类。那么若是这个库中有任何改动,咱们都必须从新编译全部的类继承树上面的代码,不然在咱们主程序的子类中,就会发生偏移计算错误。ui

简单来讲呢,若是 Swift 3.0 能把 Fragile Binary Interface 处理好的话,对咱们开发者最直观的感觉就是: 编译速度加快设计

 

  3、可移植性(Portability)代码规范

  这个很简单,就是让 Swift 能移植到更多的其余平台,而且让 Swift 写出的代码,能够正确的运行在全部这些平台上。

 

  4、从新整理类型体系(Type system cleanup and documentation)

  从新设定类型转换规则,以及它们在编译器的类型检查的实施,目的是一个更小,更简单的类型系统,更严格的定义和更可靠的类型检查。

 

  5、全面支持泛型(Complete generics)

  全面泛型化,可使得 Swift 能提供更好的扩展适应能力,特别是标准库。目前的 Swift 版本已经很好的支持了泛型的大部分特性了,这点你们在看 Swift 2.2 的 API 文档中其实已经可以发现了。但目前还并无将泛型的特性彻底实现,因此此次 Swift 3.0 打算全面支持泛型的全部特性。

 

  6、Focus and refine the language

  聚焦在语言自己,改进语言很差的地方

 

  7、API design guidelines

  此次还发布了 Swift 语言的 API 设计规范。 这个规范的目的是让你们设计出更加统一的 API,里面给出了不少代码规范,这个很是值得一看,即使咱们不去构建开源库,对咱们的平常代码风格也是颇有帮助的。而且 Swift 3.0 会对大多数 API 根据这个规范进行从新设计。理解了这个设计规范,对咱们理解 Swift 语言也是颇有帮助的~