写点什么

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:448508

评论

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

不懂Hybird开发,感觉错过一个亿~

FinFish

小程序 前端框架 APP开发 APP软件开发、 混合开发

基于Spring-AOP的自定义分片工具

京东科技开发者

aop 数据分片 spring aop 配置文件

算法题学习---删除有序链表中重复的元素-II

桑榆

算法题 11月月更

计算机网络:数据链路层设备

timerring

计算机网络 11月月更 网桥

【愚公系列】2022年11月 微信小程序-应用生命周期和全局变量

愚公搬代码

11月月更

信用卡评测系列——阳光惠生活APP深化服务客户品牌理念,焕新升级7.0版

易观分析

金融 银行 信用卡

传输线路动态巡检探索

鲸品堂

网络 传输网络

解决数据分析落地难的几点经验

穿过生命散发芬芳

数据分析 11月月更

2022年中国电商平台市场洞察

易观分析

电商 报告

通过实战总结的 使用Go的小技巧

王中阳Go

Go golang 高效工作 学习方法 11月月更

元器件科普|变压器的分类及形状构造

元器件秋姐

元器件采购 华秋商城 变压器 电感器 电压

提升80%上云集成效率, TA是如何做到的

华为云开发者联盟

云计算 后端 华为云 云集成

【web 开发基础】PHP 变量的作用范围 (29)

迷彩

作用域 静态变量 全局变量 局部变量 11月月更

度量BGP监测源数量对AS可见性的影响

郑州埃文科技

AS IP地址 BGP数据源

一个宁静祥和没有bug的下午和SqlSession的故事

京东科技开发者

mybatis sql Spring Boot CLI SQLSession

OpenHarmony 3.2 Beta多媒体系列——音视频播放框架

OpenHarmony开发者

OpenHarmony

鸿蒙系统ARKUI框架对于分布式计算和请求API的实战研究

恒山其若陋兮

前端 11月月更

基于鸿蒙系统的ArkUI框架的公共剪切类属性和多态样式在前后端分离项目中的表现

恒山其若陋兮

11月月更

Go定时任务源码 - robfig/cron

人生如梦

Go 定时任务 cron

5分钟搭建图片压缩应用

华为云开发者联盟

云计算 后端 华为云 函数工作流

深度解析KubeEdge EdgeMesh 高可用架构

华为云开发者联盟

云计算 云原生 后端 华为云

大模型狂欢背后:AI基础设施的“老化”与改造工程

OneFlow

人工智能 深度学习 大模型

“如何实现高效的应用交付”鲁班会开发者训练营厦门站进行时

华为云开发者联盟

云计算 软件开发 华为云 应用集成

Bigkey问题的解决思路与方式探索

vivo互联网技术

redis dba bigkey

跨平台桌面应用开发都有哪些主流框架

FinFish

小程序 跨端框架 桌面端开发 跨端应用开发

API安全设计5A原则

阿泽🧸

11月月更 API安全

【Ajax进阶】跨域和JSONP的学习

坚毅的小解同志

ajax 11月月更

【Ajax】如何通过axios发起Ajax请求

坚毅的小解同志

ajax 11月月更

【Ajax】全面了解http协议

坚毅的小解同志

HTTP 11月月更

SpringBoot之用拦截器避免重复请求

okokabcd

Spring Boot

ArkUI框架基于鸿蒙系统的Scroll和Scroller和自定义组件之插槽的实战案例心得

恒山其若陋兮

前端 11月月更

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