swift3.0的改变

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

 

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

  一、稳定的ABI(Stable ABI)

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

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

 

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

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

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

简单来说呢,如果 Swift 3.0 能把 Fragile Binary Interface 处理好的话,对我们开发者最直观的感受就是: 编译速度加快

 

  三、可移植性(Portability)

  这个很简单,就是让 Swift 能移植到更多的其他平台,并且让 Swift 写出的代码,可以正确的运行在所有这些平台上。

 

  四、重新整理类型体系(Type system cleanup and documentation)

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

 

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

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

 

  六、Focus and refine the language

  聚焦在语言本身,改进语言不好的地方

 

  七、API design guidelines

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

posted @ 2016-05-05 19:14  ForrestWoo  阅读(3081)  评论(0编辑  收藏  举报