写点什么

Swift 6 正式可用

  • 2024-10-31
    北京
  • 本文字数:1517 字

    阅读完需:约 5 分钟

大小:691.71K时长:03:56
Swift 6 正式可用

Swift 团队正式宣发了 Swift 6,该版本是苹果开源语言的一个全新版本,重点关注底层和嵌入式编程、并发代码安全、新的开平台 API,以及对 Linux 和 Windows 的扩展支持。

 

InfoQ 已有多篇关于 Swift 6 中新功能的文章,其中包括用于解决嵌入式设备和内核级代码中特定限制的嵌入式 Swift 编译模式、全新跨平台测试框架 Swift Testing,以及可帮助开发人员创建无数据竞争的并发程序的无数据竞争的安全模式(这是要归功于一款新的编译时静态检测器)。

 

Swift 6 中其他的主要新功能还包括类型化抛出、泛式内存所有权扩展、128 位整数支持,以及扩展的 C++ 互操作性。类型化抛出可以将函数抛出的错误类型作为其签名的一部分指定,也就是说开发者可以从之前的不声明泛型的抛出子句:

func parseRecord(from string: String) throws -> Record {   // ... }
复制代码

到现在的明确声明错误类型,从而带来额外的简化:在开发者用 do...try...catch 代码块封装这类函数的调用时,错误类型就可以在编译时已知:

func parseRecord(from string: String) throws(ParseError) -> Record {   // ... }

// call site:do { let record = try parseRecord(from: myString)} catch { // 'error' has type 'ParseError'}
复制代码

有趣的是,所有 Swift 6 的函数本质都有一个类型化的抛出签名。换句话说,带有非类型化的 throws函数其实就是抛出 Any Error 的函数,而非类型的 throws 等同于 throws(any Error)。需要注意的是,这一功能并非是要取代所有的非类型化抛出

 

在会同时转发抛出错误的客户端通用代码,或是无法分配内存的资源受限的环境中(如嵌入式 Swift 代码),这一功能非常有用。

 

事实上,根据 evolution 提案作者的说法 ,“对大多数 Swift 代码来说,现在的(无类型)抛出仍然是更优的默认错误处理机制”。

 

新的内存所有权模型已在 Swift 5.9 中引入,并在 Swift 6 中通过对泛型“move only”类型的扩展支持将其进一步巩固。所有权的概念是指通过函数让特定一段代码负责某个变量的最终销毁。在 Swift 5.9 之前, Swift 的内存模型是不像 Objective-C 这类通过手动引用计数对开发者公开的,反而是编码成一套规则,这种在一般情况下效果还不错,但却很难通过默认的引用计数算法控制变量的销毁。

 

简单来说,Swift 5.9 中的内存所有权模型是基于借用(borrowing)和消耗(consuming)的概念,允许 z 对初始化程序和函数处理接收到的参数所有权的方式自定义,从而改变了 Swift 中默认的初始化程序拥有所有权(进而消耗),函数没有所有权(因此只能借用)。这套模型中的重要组成部分是由“不可复制(non copyable)”协议体现的,该协议适用于值始终具有唯一所有权且不可复制的类型,也就是“move only”类型。Swift 5.9 中协议的实现是无法用于泛型、协议或存在类型的,但 Swift 6 弥补了这片空白。泛型 ~Copyable 的更多细节部分不在本文的探讨范围内,请移步 Swift Evolution 提案。

 

说起 ~Copyable 协议,Swift 6 利用该协议将 C++ 的互操作扩展到 move-only 类型。一个 C++ 类如果没有复制构造函数,Swift 会假设它是 ~Copyable 的,也可以通过 SWIFT_NONCOPYABLE 注解显式忽略已有的复制构造函数。此外,Swift 现在也支持虚拟方法、默认参数和更多的标准库类型(如 std::mapstd::optional)。

 

再说平台支持,Swift 6 现在可用于更多的 Linux 发行版 Amazon Linux、Debian、Fedora、Red Ha、Ubuntu,以及 Windows x86_64 和 arm64 体系结构。在 Linux 上,Swift 6 SDK 支持构建没有外部依赖、完全静态链接的可执行文件,并可从其他 Linux 平台交叉编译。

 

Swift 6 中的内容远不止这些,请参见官方发布的全部详细信息。

 

原文链接:

Swift 6 Officially Available

2024-10-31 09:448837

评论

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

API+DevOps:华为云API Arts一体化平台,端到端呵护您的API

科技怪授

API 华为云

ChatGPT“爆红”启示:工业AI如何掀起新型“工业革命”?

Openlab_cosmoplat

人工智能 开源 工业 智能制造 ChatGPT

ONES 获得 SOC2 Type1 鉴证报告,数据安全能力受权威认可

万事ONES

小程序与微服务架构如何进行结合

Onegun

小程序 微服务架构 移动开发

PCB板漏孔、漏槽怎么办?看工程师避坑“SOP”

华秋PCB

PCB 电路板 PCB设计 钻孔

AntDB数据库首个社区版正式发布,携手生态更多可能

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库 企业号 3 月 PK 榜

存量设备 0 改造,平滑迁移阿里云 IoT 物联网平台最佳实践——实践类

阿里云AIoT

阿里云 物联网 IoT

FlagOpen大模型技术开源体系,开启大模型时代“新Linux”生态

硬科技星球

软件测试 | HTTPS 的通信加解密过程,证书为什么更安全?

测吧(北京)科技有限公司

测试

Unity 荣膺 2022 鲸鸣奖“影响力出海品牌”及“新势力出海服务商”两项大奖

极客天地

足不出户,搞定IoT设备故障诊断和恢复——实践类

阿里云AIoT

阿里云 物联网 IoT

十五年,始吾心

博睿数据

可观测性 智能运维 博睿数据 15周年 品牌历史

安卓手机的网络权限,全网最全解答

神锁离线版

android 互联网 安卓 网络权限 安卓权限

软件测试 | 简历中应该如何描述才能体现出软技能的实力?

测吧(北京)科技有限公司

测试

一次配置,设备就可实现毫秒级的全球就近接入——实践类

阿里云AIoT

阿里云 物联网 IoT

IoT生态构建:AIoT认证设备中心——实践类

阿里云AIoT

阿里云 物联网 IoT

OpenMLDB SQL 与标准 SQL 的主要差异

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

OpenMLDB 社区月报 | 2023 年 2 月

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

江苏鸿程大数据:基于鲲鹏DevKit开发数据报告生成平台,数据库查询效率提升30%

极客天地

前端刷完这12道滑动窗口,就可以出山面试了

js2030code

JavaScript LeetCode

架构作业-8

梁山伯

一文读懂Vue开发小程序的技术原理

没有用户名丶

Swift 6 正式可用_Android/iOS_Sergio De Simone_InfoQ精选文章