OceaBase开发者大会落地上海!4月20日共同探索数据库前沿趋势!报名戳 了解详情
写点什么

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:003425
用户头像

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

关注

评论

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

连续三年入围 Gartner 容器竞争格局,阿里云容器服务新布局首次公开

阿里巴巴云原生

容器 运维 云原生 k8s 边缘计算

Java-技术专题-多线程顺序执行的8种方案实现

洛神灬殇

Java 并发编程 AQS 多线程 JUC

应“云”而生的 Java 框架 Quarkus:构建小而快的镜像

张晓辉

Java Docker Serverless CloudNative Quarkus

CloudIDE:为开发者写代码开启“加速”模式

华为云开发者联盟

开发者 代码 华为云 CloudIDE HDC2021

基于MySQL存储的自研消息队列架构设计文档

Geek_2e7dd7

近期值得关注的四款工具

彭宏豪95

效率 工具 Mac 4月日更

RocketMQ 在使用上的一些排坑和优化

AI乔治

Java 架构 分布式 RocketMQ 高并发

Rust从0到1-代码组织-路径

rust 路径 代码组织 paths

6 张图带你彻底搞懂分布式事务 XA 模式

阿里巴巴云原生

Java 数据库 云原生 存储

容器 & 服务: 扩容(二)

程序员架构进阶

容器 k8s 28天写作 弹性扩容 4月日更

2021金三银四最新拼多多 +蚂蚁金服 +头条(已拿offer),面试真题分享!

Java 编程 程序员 架构 面试

Linux字符截取命令-cut

进击的梦清

Linux 运维 xshell

JVM类加载机制笔记

风翱

4月日更 JVM类加载

拍立淘创始人潘攀博士为你揭开“以图搜图”的神秘面纱!

博文视点Broadview

怎么理解组织?

石云升

团队建设 28天写作 职场经验 管理经验 4月日更

面向软件 IT 专业的高校大学生职业规划问卷调查

打工人!

IT 问卷调查 职业生涯规划

南京的春天

小天同学

随笔 4月日更 春天 南京 散文

基于区块链技术的去中心化自治组织——核心属性、演进脉络与应用前景

CECBC

区块链

阿里P8独家揭秘:短期内升职加薪的方法,到底是什么?

Java架构师迁哥

贝壳基于 Flink 的实时计算演进之路

Apache Flink

flink

MySQL 死锁套路:一次诡异的批量插入死锁问题分析

AI乔治

Java MySQL 架构

金三银四 Java 架构面试指南上线, 1000 余道大厂面试真题,送你上岸

Java 编程 程序员 架构 面试

硬核系列 | 手写脚本语言编译器

九叔(高翔龙)

Java 编译器 脚本语言 词法分析器 编译器原理

【Node专题】Buffer理解

南吕

后端 nodejs 4月日更

Python异常的这些知识点你都get到了吗?

老猿Python

Python 编程语言 异常处理

Golang easyjson

escray

学习 极客时间 Go 语言 4月日更

谁说 Java 不能用来跑 Serverless?

张晓辉

Java Serverless Knative Quarkus

20年研发安全积累,5大研发安全能力让软件“天生安全”

华为云开发者联盟

DevOps 安全 DevSecOps 华为云 devcloud

2021团体程序设计天梯赛-部分题解

玄兴梦影

算法 比赛 算法解析

教育是限制吗?

箭上有毒

4月日更

网络协议学习笔记 Day5

穿过生命散发芬芳

网络协议 4月日更

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