红帽白皮书新鲜出炉!点击获取,让你的云战略更胜一筹! 了解详情
写点什么

Swift 4 路线图

  • 2016-10-25
  • 本文字数:1309 字

    阅读完需:约 4 分钟

Swift 4 预计在 2017 年底发布。该版本旨在源代码和 ABI 层面实现语言的稳定性,新增特性将会包括改进后的泛型以及一个受 Rust/Cyclone 启发的内存所有权模型。

Swift 4 的开发将分成两个阶段。第一阶段将包含所有使 Swift ABI 稳定所需要的特性,同时又要保证兼容 Swift 3 源代码。第二个阶段还有点不确定,可能也会包含大大小小的新特性,前提是它们不会改变现有语言特性的 ABI 或者破坏到标准库的 ABI。

源代码兼容性

虽然稳定性可能会妨碍语言能力的发展,但源代码兼容是一个基本要求。为了推动语言的快速发展,同时又保证源代码兼容性,Swift 团队将扩展现有的 @available 属性,让它既可以表示某项特性与特定的平台或操作系统版本有关,也可以表示和特定的 Swift 语言版本相关。

例如,你可以通过下面的代码声明一个 API 在 Swift 3.1 中已废除:

@available(swift, obsoleted: 3.1)
class Foo {
//…
}

ABI 稳定性

使 Swift ABI 稳定一方面需要为将要新增的特性奠定基础,这是通过“弹性(resiliency)”特性实现的,它会提供一种方法,让公共 API 在演化的同时保证 ABI 的稳定性。这是可以实现的,例如,明确 API 的哪些部分可以变,而又不会破坏 ABI,从而减少在某些面向对象语言中出现的脆弱的基类问题。

另一方面,使 ABI 稳定需要清理掉语言中现有的依赖,那样,它们就不会成为 ABI 的固定部分。特别地,有许多这样的改进已经得到确认,比如:

  • 条件一致性:它表达的意思是,一个泛型类型,只有当它的类型参数满足特定的要求时才符合特定的协议。以 Array 集合为例,只有当它的元素是 Equatable 类型时,才能实现 Equatable 协议:
复制代码
extension Array: Equatable where Element: Equatable {
static func ==(lhs: Array<Element>, rhs: Array<Element>) -> Bool { ... }
}
  • 递归协议要求:允许关联类型与外围协议一致。例如,Subsequence 本身应该是 Sequence,因此,Swift 4 将允许下面这个当前不合语法的定义:
复制代码
protocol Sequence {
associatedtype Iterator : IteratorProtocol
...
associatedtype SubSequence : Sequence // 当前不合语法,但应该可以
}
  • 关联类型的 where 语句:将现在可以在泛型类型参数中使用的、富有表现力的 where 带给了关联类型,例如:
复制代码
protocol Sequence {
associatedtype Iterator : IteratorProtocol
associatedtype SubSequence : Sequence where SubSequence.Iterator.Element == Iterator.Element
...
}

最后,还有许多工作是为了在 Swift 4 中添加一个类似 Rust/Cyclone 的内存所有权模型。Rust 内存管理以实体所有权的概念为基础,通过它可以跟踪谁负责释放它或谁可以使用它。结合生存期的概念,可以避免最终释放实体时出现悬空引用。C 语言方言 Cyclone (目前已经不再开发)就使用了一种基于区域的内存管理模型,为每个已分配实体指定一个区域,提高分配/ 释放的性能,更好地支持已释放实体的检测。扩展Swift 内存管理模型对系统程序员以及所有迫切需要性能稳定的情况特别有用。可以预见的是,向Swift 添加一种内存所有权模型已经超出了第一阶段的范围,该阶段的目标是有一个整体的设计,以便了解它将给ABI 带来什么变化。

查看英文原文 The Roadmap to Swift 4

2016-10-25 19:003414
用户头像

发布了 1008 篇内容, 共 372.1 次阅读, 收获喜欢 340 次。

关注

评论

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

Helm部署和体验jenkins

程序员欣宸

Kubernetes Helm jenkins 11月月更

计算机网络:局域网的基本概念和体系结构

timerring

计算机网络 局域网 11月月更

Python进阶(三十)Python3实现随机数

No Silver Bullet

Python 随机数 11月月更

什么是缓存击穿、缓存穿透、缓存雪崩?如何解决?

海风极客

redis 缓存 11月月更

Java实现List去重的5种方式

共饮一杯无

Java List 11月月更

Zebec 创始人Sam Thapaliya11月12日Twitter Space 发言内容回顾

股市老人

第九期 - 模块六

wuli洋

探知数字化研发3 - 思维篇

薛飞

Set集合和其之类HashSet、LinkedHashSet

共饮一杯无

Java set 11月月更

Verilog代码的风格规范

攻城狮Wayne

Module Verilog 11月月更

第一章TCP/IP协议

初学者

TCP/IP 11月月更

分布式系统设计理论之一致性哈希

海风极客

一致性哈希 分布式设计 11月月更

刨根问底 Redis, 面试过程真好使

蔡农曰

Java 编程 面试 后端

企业级业务架构设计:方法论与实践学习笔记二

程序员架构进阶

架构 业务架构 11月日更 11月月更

List集合按照某个字段或者属性分组的两种方式

共饮一杯无

Java List 11月月更

Python进阶(三十一)往MySQL数据库里添加数据,update和insert效率分析

No Silver Bullet

Python MySQL 数据操作 11月月更

深入理解客户端篇之 Jedis

邱学喆

redis jedis客户端

深入浅出建造者模式-干货!

海风极客

设计模式 11月月更

数据治理的核心:大数据开发平台

Taylor

大数据 数据开发 数据平台 数据开发平台 调度平台

Spring 5(一)概述

浅辄

Java Spring5 11月月更

架构误区系列4:volatile task

agnostic

延迟任务 领域建模

案例体验HTTP2.0多路复用

小鑫同学

前端 HTTP2.0 11月月更

The Availability and Performance analytics of Sina Weibo comment

David

架构实战营

Java Web(八)JSP

浅辄

javaWeb jsp 11月月更

Spring 5(二)IOC容器

浅辄

Java Spring5 11月月更

深入分析Java的序列化与反序列化

石臻臻的杂货铺

Java 11月月更

Redhat持久化日志与实战练习

阿柠xn

Linux 运维 11月月更

Python进阶(三十三)Python获取并输出当前日期时间

No Silver Bullet

Python 日期处理 11月月更

Zebec 创始人Sam Thapaliya11月12日Twitter Space 发言内容回顾

EOSdreamer111

【简历优化】如何在简历中最大化体现出自己的学习能力?

王中阳Go

高效工作 面试 高效学习 简历 11月月更

第三章TCP/IPip地址概念与应用

初学者

TCP/IP IP地址 11月月更

Swift 4路线图_移动_Sergio De Simone_InfoQ精选文章