苹果“最强编程语言”10周年重磅更新——Swift 6正式发布:全面支持Linux和Windows、增强与C++的互操作性
Swift 是苹果公司推出的编程语言,旨在替代 Objective-C,后者自 20 世纪 80 年代初以来基本没有任何更新,缺乏现代语言功能。
2014 年 6 月 2 日,苹果在 WWDC 上首次发布了 Swift,以及第一个公开使用 Swift 编写的应用程序:WWDC 应用程序,同时向苹果的注册开发者发布了 Swift 语言的测试版,但未承诺最终版本与测试版本的源代码相互兼容。
苹果宣称 Swift 的特点是:快速、现代、安全、互动,而且明显优于 Objective-C 语言。
2014 年 9 月 9 日,Swift 1.0 和 iOS 8、Xcode 6.0 一同正式发布 GM 版本,达成了一个重要的里程碑。
Swift 6 的发布为 Swift 语言带来了显著的进步,包括对并发、类型化异常抛出、所有权、C++ 互操作性、嵌入式 Swift 以及 128 位整数的支持和改进。
它引入了新的同步库、类型化抛出机制、对不可复制类型的支持以及对嵌入式开发的初步支持。
此外,Swift 6 还增强了对 C++ 的互操作性,统一了 Foundation 在所有平台上的实现,并推出了全新的 Swift Testing 库。
该版本还提供了对 Linux 和 Windows 平台的全面支持,包括对更多 Linux 发行版和 Windows 架构的支持,以及为 Linux 提供了全静态 SDK。
Swift 6 还致力于提高生产效率,通过引入新的生产力增强功能和改进的调试宏,使得开发者能够更高效地编写和调试代码。
-strict-concurrency=complete
以警告形式提供。func parseRecord(from string: String) throws(ParseError) -> Record {
// ...
}
parseRecord(from:)
将返回一个Record
实例或抛出一个类型的错误ParseError
。do..catch
块将推断变量ParseError
的类型error
:do {
let record = try parseRecord(from: myString)
} catch {
// 'error' has type 'ParseError'
}
C++ 互操作性
Swift 5.9 引入了与 C++ 的双向互操作性,将 Swift 无缝引入更多现有项目。
Swift 6 将互操作性支持扩展到 C++ 仅移动类型、虚拟方法、默认参数以及更多标准库类型包括std::map
和std::optional
。
嵌入式 Swift
Swift 6 包含 Embedded Swift 的实验性预览版,这是一种语言子集和编译模式,适用于嵌入式软件开发,例如编程微控制器。该工具链支持 ARM 和 RISC-V 裸机目标。
Embedded Swift 依靠通用特化生成小型独立二进制文件。由于它不依赖于运行时或类型元数据,因此 Embedded Swift 适用于内存限制严格的平台以及运行时依赖性有限的低级环境。
嵌入式 Swift 仍然是一个实验性功能,在未来的 Swift 版本中提供稳定支持之前仍需持续开发。
Swift 6 提供了统一的 Foundation 实现,确保了跨平台的一致性和可靠性,并且为 Linux 和 Windows 平台提供了全面的支持。
Swift 6 统一了 Foundation 在所有平台上的实现。现代、可移植的 Swift 实现提供了跨平台的一致性,它更加强大,并且是开源的。
macOS 和 iOS 开始使用 Foundation 的 Swift 实现以及 Swift 5.9,而 Swift 6 将这些改进带到了 Linux 和 Windows。
核心类型如 JSONDecoder、URL、Calendar、FileManager、ProcessInfo 等已在 Swift 中完全重新实现。这些类型与 macOS 15 和 iOS 18 共享其实现,从而提供了全新级别的跨平台一致性、可靠性和性能。
Swift 6 推出了 Swift Testing 库,这是一个专为 Swift 设计的全新测试框架,它提供了丰富的 API 和宏支持,使得编写和组织测试变得更加容易。
Swift 6 引入了 Swift Testing,这是一个从零开始为 Swift 设计的新测试库。它包含了富有表现力的 API,使编写和组织测试变得简单。当测试失败时,它使用像 #expect 这样的宏提供详细的输出。
此外,它还具备参数化等功能,能够轻松地在大型代码库中以不同参数重复执行测试。
例如:
@Test("Continents mentioned in videos", arguments: [
"A Beach",
"By the Lake",
"Camping in the Woods"
])
func mentionedContinents(videoName: String) async throws {
let videoLibrary = try await VideoLibrary()
let video = try #require(await videoLibrary.video(named: videoName))
#expect(video.mentionedContinents.count <= 3)
}
Swift 6 对调试工具进行了改进,包括引入了新的调试宏,以及提高了 LLDB 调试器的启动性能。
Swift 6 提供了一种新的调试宏,可以轻松自定义在使用 p 命令时对象在 LLDB 中的显示方式,以及在 Xcode 和 VSCode 的变量视图中,采用一种不运行任意代码的格式方案。
符合 CustomDebugStringConvertible 协议的类型提供了一个 debugDescription 属性,该属性返回描述对象的字符串。
在 LLDB 中,po 命令调用该计算属性。相比之下,p 命令使用 LLDB 的类型摘要格式化程序直接根据其存储属性值来格式化对象。
@DebugDescription 是标准库中的一个新宏,它允许开发者直接在代码中为自己的类型指定 LLDB 类型摘要。该宏处理 debugDescription 属性,将涉及存储属性的简单字符串插值转换为 LLDB 类型摘要。
这使得即使在使用 p 时,LLDB 也能使用您的自定义格式,并且可以在 Xcode 或 VSCode 的变量显示窗口中使用。
该宏可以利用现有的 CustomDebugStringConvertible 符合性,也可以仅为 LLDB 的 p 命令提供单独的字符串插值。
平台支持
Swift 6 全面为 Linux 和 Windows 带来了重大改进,包括支持更多 Linux 发行版和 Windows 架构。
Swift 6 支持为 Linux 构建完全静态链接的可执行文件;这些文件没有外部依赖项,因此非常适合想要将程序直接复制到系统或容器中并运行它而无需安装任何额外软件的情况。该 SDK 还可用于从其他平台交叉编译到 Linux。
Swift 6 增加了对 Debian 和 Fedora 以及 Ubuntu 24.04 的官方支持和测试。Windows 构建性能方面,预构建的工具链现已适用于 arm64 架构,这为 ARM 主机上的 Windows 提供了改进的编译器性能。
在 Swift 6 中,Swift 包管理器还默认在 Windows 上的多个核心上并行构建。在 10 核机器上,可以将构建性能提高多达 10 倍。
https://www.swift.org/install/
https://www.swift.org/blog/announcing-swift-6
延伸阅读
WWDC24:看看Swift、SwiftUI、UIKit、Xcode 16新功能
Swift 2023:强调并发、泛型和C++互操作性,开发Swift解析器
END
热门文章
谷歌SRE工程师打拼9年:年薪超60万美元、钱赚够了、对技术不再那么热爱Zen浏览器——号称是“开源版Arc”、轻如鸿毛、快如闪电“神仙外企”、“IT养老院”前员工忆往昔:曾经是乌托邦、工资多得花不完只能买房全球第二大成人网站OnlyFans一年赚66亿美金,远超Pornhub、比AI创业公司都挣得多