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 语言也是很有帮助的~
swift3.0的改变的更多相关文章
- Swift3.0变化分享
		Swift 3.0 做出的改变很大,在这篇文章中,我将尽我所能,利用代码样例给大家解释Swift 3.0最重要(要命)的改变,希望大家能够做好升级Swift 3.0 的准备.Swift 3.0的改变不 ... 
- swift3.0变化总结
		Swift 3.0 做出的改变很大,在这篇文章中,我将尽我所能,利用代码样例给大家解释Swift 3.0最重要(要命)的改变,希望大家能够做好升级Swift 3.0 的准备.Swift 3.0的改变不 ... 
- Swift2.3 --> Swift3.0 的变化
		Swift3.0语法变化 首先和大家分享一下学习新语法的技巧: 用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Synt ... 
- Swift3.0都有哪些变化
		从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行.在W ... 
- Swift3.0语言教程删除字符与处理字符编码
		Swift3.0语言教程删除字符与处理字符编码 Swift3.0语言教程删除字符 Swift3.0语言教程删除字符与处理字符编码,在字符串中,如果开发者有不需要使用的字符,就可以将这些字符删除.在NS ... 
- Swift3.0语言教程字符串大小写转化
		Swift3.0语言教程字符串大小写转化 Swift3.0语言教程字符串大小写转化,在字符串中,字符串的格式是很重要的,例如首字母大写,全部大写以及全部小写等.当字符串中字符很多时,通过人为一个一个的 ... 
- swift3.0 coredata 的使用
		//swift3.0在语法上有很大的改变,以简单的增删改查为例,如下: //User类如下: import Foundation import CoreData extension User { @n ... 
- Swift3.0相对于2.3语法的一些变化
		前言 : Swift3.0的Swift的第3个主要版本,目标是安全,快速和有表现力,也是第一个有开源社区参与开发的Swift版本.由于语法和API改动比较多,Xcode 8.0 Beta提供了migr ... 
- Swift3.0语法变化
		写在前面 首先和大家分享一下学习新语法的技巧:用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Syntax- 让Xcod ... 
随机推荐
- [教程]怎么用百度云观看和下载"磁力链接"无需下载直接观看.
			1, 打开网址 http://okbt.net/ 输入你想要看的电影名字, 点搜索,鼠标右键点击拷贝磁力链接.或者 电脑装了迅雷的话.可以直接点击.用迅雷下载. 磁力链接都是这种格式的.例: mag ... 
- Emberjs之ComputedProperty
			计算属性,以下简称CP.简单概括来讲,就是在需要属性值的时候计算一个Function,并将Function返回的值保存在属性中,当第二次获取属性值时,如果发现属性并未改变则直接读取属性,如果属性依赖的 ... 
- MySQL1:MySQL函数汇总
			前言 MySQL提供了众多功能强大.方便易用的函数,使用这些函数,可以极大地提高用户对于数据库的管理效率,从而更加灵活地满足不同用户的需求.本文将MySQL的函数分类并汇总,以便以后用到的时候可以随时 ... 
- jenkins + Git 搭建持续集成环境
			持续集成通过自动化构建.自动化测试以及自动化部署加上较高的集成频率保证了开发系统中的问题能迅速被发现和修复,降低了集成失败的风险,使得系统在开发中始终保持在一个稳定健康的集成状态.jenkins是目前 ... 
- C#可扩展编程之MEF学习笔记(二):MEF的导出(Export)和导入(Import)
			上一篇学习完了MEF的基础知识,编写了一个简单的DEMO,接下来接着上篇的内容继续学习,如果没有看过上一篇的内容, 请阅读:http://www.cnblogs.com/yunfeifei/p/392 ... 
- 网络异步编程(C#)团购课
			新生命开发团队大石头讲解网络异步编程(C#) 内容:网络编程基础.IOCP.APM.SAEA 时长:2~3小时 价格:20元,20人及以上成团,http://item.taobao.com/item. ... 
- php版的redis操作库predis操作大全
			转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/146.html predis是php连接redis的操作库,由于它完全使用 ... 
- vuejs - the component is a fragment instance
			vuejs - the component is a fragment instance http://vuejs.org/guide/components.html#Fragment-Instanc ... 
- IOS开发之控件篇UINavigationController第二章 - 标题
			1.什么是标题(Title) NavigationController里面的viewcontroller,每一页都会有一个标题,如图3r就是这个页面的标题 2. 如何设置标题 一般都会在这个Navig ... 
- Liferay7 BPM门户开发之41: Expando API入门
			Expando 是liferay的一种自定义表格扩展的方式,从5.0就已存在 , 可以在运行时新建表格\字段\行\值. 这是一种Service Builder之外的轻量级替代扩展方式,不必像Servi ... 
