2025 AI基础设施风向标,不看必后悔!#AI基础设施峰会 了解详情
写点什么

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

评论

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

HTAP大潮下,TDSQL的探索与实践

腾讯云数据库

数据库 tdsql

Alibaba内网“疯狂”传阅的P8开源出的SpringBoot入门到进阶小册

Java~~~

Java 架构 面试 微服务 Spring Boot

铁山靠!阿里P9架构师写的这份JDK源码笔记,竟直接带火了GitHub

Java~~~

Java 源码 架构 jdk 面试

新来的前端小姐姐问:Vue路由history模式刷新页面出现404问题

华为云开发者联盟

node.js Vue hash 404 history 模式

西部首个国家级车联网先导区获批,EMQ 联手中国移动打造 5G 交通生态链

EMQ映云科技

自动驾驶 车联网 5G 移动 emq

AI时代来袭,你的存储做好准备了吗?

焱融科技

AI 高性能 文件存储 云计算, 分布式,

细节炸裂!阿里P8高管总结出这份1500页的Java编程思想(第六版)

Java~~~

Java 编程 架构 面试 JVM

干货 | TDSQL-A核心架构揭秘

腾讯云数据库

数据库 tdsql

TDSQL“相似查询工具MSQL+”入选VLDB论文

腾讯云数据库

数据库 tdsql

字节再次出圈!GitHub上爆火一星期的算法刷题手册竟出自这人之手

Java~~~

Java 架构 面试 算法 刷题

GitHub上这份阿里的Java高并发核心手册,即使再过20年依然“NB”

Java~~~

Java redis 架构 面试 高并发

逮虾户!清华架构师吐血整理出这份多线程并发指南,带你弯道超车

Java~~~

Java MySQL 架构 面试 JVM

TDSQL-A,全力应对海量数据实时分析需求

腾讯云数据库

数据库 tdsql

资深Linux系统管理员常用的15个很好用的Cron工作示例

华为云开发者联盟

Linux Linux Cron 工作示例 应用程序 工作调度

初识FL Studio中的FLEX插件

懒得勤快

牛逼!从阿里大牛手里买到了1个G牛逼的Java面试题库,史上最强

Java~~~

Java 架构 面试 JVM 架构师

如何借助腾讯云简单、高效移动开发

腾讯云数据库

数据库 tdsql

企业为什么要建设自有即时通讯软件系统

BeeWorks

阅读

ThreadLocal在链路性能测试中实践

FunTester

多线程 ThreadLocal 性能测试 线程安全 FunTester

TDSQL的2020进化在未来之前,更在未来之后

腾讯云数据库

数据库 tdsql

终于有人把操作系统,CPU,基础知识,网络一次讲清楚了,绝绝子

Java~~~

Java 架构 面试 操作系统 TCP/IP

阿里资深工程师写出这份Java异步编程指南,竟获GitHub百万点赞

Java~~~

Java 架构 面试 计算机 TCP协议

一年数十万次实验背后的架构与数据科学

百度Geek说

人工智能 架构 数据科学

「免费开源」基于Vue和Quasar的前端SPA项目crudapi后台管理系统实战之模块管理(十四)

crudapi

Vue API crud crudapi qusar

腾讯私有云MySQL解决方案—TDSQL

腾讯云数据库

数据库 tdsql

紧锣密鼓完成小闭环,微型博客项目快快进入下一阶段

梦想橡皮擦

9月日更

【VueRouter 源码学习】第七篇 - 路由变化触发视图更新

Brave

源码 vue-router 9月日更

TDSQL Inside:从腾讯的分布式数据库能力到行业的能力

腾讯云数据库

数据库 tdsql

Code Review在TDSQL-C 的应用实践

腾讯云数据库

数据库 tdsql

TDSQL 全时态数据库系统-理念与愿景

腾讯云数据库

数据库 tdsql

用6年前的低性能电脑运行「360安全卫士极速版」,效果怎么样?

Regan Yue

安全 测评 病毒云查杀 9月日更

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