写点什么

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

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

关注

评论

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

Github上堪称最全的面试题库(Java岗)到底有多香

Java 程序员 架构 面试

Python 随机数函数 choices

HoneyMoose

Python 随机字符串

HoneyMoose

2020年张小龙非公开课的一点思考

lenka

3月日更

《Redis 核心技术与实战》学习笔记 04

escray

redis 学习 28天写作 3月日更 Redis 核心技术与实战

Python 分通道读取图像数据,取经之路第 4 天

梦想橡皮擦

28天写作 3月日更

永动金融EGG公链去中心化社交平台与通证EFTalk全球正式亮相

币圈那点事

区块链

大专生阿里/腾讯/京东面经分享:Java面试精选题+架构实战笔记(技术狂补)

比伯

Java 编程 架构 面试 计算机

你真的懂Spring解决循环依赖吗?

Java 架构 Spring Boot

(28DW-S8-Day28) 战略流程重整

mtfelix

28天写作

翻译:《实用的Python编程》07_00_Overview

codists

Python

思考需要大声,写下便是永恒——未完待续

Justin

总结 28天写作

我从外包辞职了,10000小时后,走进字节跳动拿了offer

Java 编程 程序员 架构 面试

我是如何拿到5大银行offer

小舰

面试 银行 笔试 校园招聘

并发编程:一次搞定单例模式

Java架构师迁哥

有利可图的NFT,NA公链(Nirvana Chain)NAC公链怎么面对高额Gas费的?

区块链第一资讯

区块链 公链 挖矿

融合发展是区块链的未来 数字通证新模式具有划时代意义

CECBC

数字通证

你是否觉得上级的能力不如你?

石云升

心理学 28天写作 职场经验 管理经验 3月日更

Go语言学习笔记:数组

worry

数组 Go 语言

Hadoop UI 系统 -HUE 详细剖析

大数据技术指南

大数据 hadoop 28天写作 3月日更

最近的一点思考「Day 28」

道伟

28天写作

C/C++Linux服务器开发完整学习路线(含免费学习资料下载地址)

Linux服务器开发

Linux 后端 C/C++ Linux服务器开发 Linux后台开发

linux下七种文件类型

xiezhr

Linux linux操作 linux运维 linux 文件权限控制

面试现场:遇到不会回答的问题,如何力挽狂澜 ?

xcbeyond

面试 3月日更

Wireshark数据包分析学习笔记Day16

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

源码分析-Netty: 架构剖析

程序员架构进阶

架构 Netty 源码剖析 28天写作 3月日更

我们为什么需要云原生?

脑极体

多队列网卡简介

依旧廖凯

28天写作 3月日更

28天

ES_her0

28天写作 3月日更

翻译:《实用的Python编程》07_01_Variable_arguments

codists

Python

老板要我开发一个简单的工作流引擎

Java小咖秀

架构 工作流 开发 工作流调度 工作流引擎

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