写点什么

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

评论

发布
暂无评论

LED植物生长灯怎么做更有效?聚光和散热不能少!

电子信息发烧客

AppLink定时调度操作

RestCloud

定时调度 APPlink

开发全新体育直播社交平台,需要这些全新赛事互动功能

软件开发-梦幻运营部

微信传输助手是什么?类似功能推荐!

职场工具箱

文件传输 素材中转站

Amazon EC2 新手初探:为实例安装图形界面

王强

Amazon EC2 亚马逊云服务器

【网络通信】浅析UDP与TCP协议的奥秘

EquatorCoco

TCP 网络协议 UDP协议

Rhino 8 for Mac(犀牛3D建模软件)中文版

iMac小白

inBuilder低代码平台新特性推荐-第八期

inBuilder低代码平台

程序员惶恐?GPTs大火,AI编程不会成为主流?

代码生成器研究

文心一言 VS 讯飞星火 VS chatgpt (139)-- 算法导论11.4 3题

福大大架构师每日一题

福大大架构师每日一题

百度爬虫的工作原理解析

快乐非自愿限量之名

百度 爬虫 爬虫分享

Principle for Mac:mac电脑好用的交互设计软件

iMac小白

一看就懂,正确使用文件传输助手的方法!

职场工具箱

文件传输 素材中转站

Netty源码学习4——服务端是处理新连接的&netty的reactor模式

快乐非自愿限量之名

Netty 源码学习

当AI加上低代码,未来将如何颠覆我们的世界

代码生成器研究

一文全面了解低代码

树上有只程序猿

软件开发 低代码 JNPF

走进低代码:不懂编程也能5分钟开发一个应用

互联网工科生

低代码 JNPF

item_list_updown 接口获取淘宝商品的上下架时间?

技术冰糖葫芦

API 文档

AI机器学习:突破传统,引领智能科技未来

不在线第一只蜗牛

人工智能 机器学习 AI

Microsoft Office LTSC 2021 for Mac(office系列全套装)

iMac小白

Scherlokk for Mac(文件搜索软件) 4.5.45005中文版

iMac小白

神器来袭!超级素材中转站助你轻松实现跨设备使用!

职场工具箱

素材中转站 文件中转站 素材库

开发体育直播系统,赛事数据如何影响着平台价值

软件开发-梦幻运营部

C++PACS医学影像信息化数字平台源码

源码星辰

医学影像 PACS 三维重建

在Vue3中使用Element-Plus分页(Pagination )组件

快乐非自愿限量之名

Vue3 教程分享

spring.factories文件作用详解,@SpringBootApplication启动过程与其关联

javaNice

Java springboot

亚马逊AWSVS阿里云 | 轻量应用服务器性能评测对比

雪奈椰子

SpringBoot 分布式锁 @klock详解

javaNice

Java springboot

软件测试/测试开发/人工智能丨视觉与图像识别自动化测试

测试人

人工智能 软件测试

镭速,克服UDP传输缺点的百倍提速传输软件工具

镭速

文件传输工具 大文件传输工具 UDP传输

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