Foundation 软件包预览现已发布
我很高兴地宣布,未来 Foundation 的预览版现已在 GitHub 上发布!
此预览版提供了一个统一的 Foundation 实现,使用 Swift 编写,速度更快、更安全,并且对新的贡献者更友好。
新的 Foundation 工作组将负责审查拟议的 Foundation API,并协调 Swift 社区与 Apple 工程团队的需求。
虽然新的软件包尚未完成,但它提供了我们统一的 Swift 实现的第一个构建块,我渴望将其提供给 Swift 社区,以进行早期测试和贡献。
当前状态
以下类型在预览软件包中可用,稍后将推出更多类型。许多类型,包括 JSONEncoder
、Calendar
、TimeZone
和 Locale
都是全新的 Swift 实现。FormatStyle
和 ParseStyle
首次作为开源提供。
- FoundationEssentials
AttributedString
Data
Date
DateInterval
JSONEncoder
JSONDecoder
Predicate
String
扩展UUID
- 国际化
Calendar
TimeZone
Locale
DateComponents
FormatStyle
ParseStrategy
为了在非 Darwin 平台上支持国际化,我们创建了一个名为 FoundationICU 的独立软件包。此存储库包含来自上游 Apple OSS Distribution ICU 的必要 ICU 实现和数据。使用通用版本的 ICU 将在格式化日期、时间和数字时产生更可靠和一致的结果。
注意:Foundation 预览软件包依赖于正在开发中的 Swift 5.9 工具链。
性能
这个新的实现是用 Swift 编写的,与之前的 C 和 Objective-C 版本相比,它提供了一些主要的优势。
Locale
、TimeZone
和 Calendar
不再需要从 Objective-C 桥接。对于 Swift 客户端来说,获取固定的 Locale
等常见任务的速度提高了一个数量级。Calendar
计算重要日期的能力可以更好地利用 Swift 的值语义来避免中间分配,从而在某些基准测试中提高了 20% 以上。使用 FormatStyle
进行日期格式化也进行了一些重大的性能升级,在一个使用标准日期和时间模板进行格式化的基准测试中,性能提升了惊人的 150%。
更令人兴奋的是新软件包中 JSON 解码的改进。Foundation 为 JSONDecoder
和 JSONEncoder
提供了全新的 Swift 实现,消除了与 Objective-C 集合类型之间昂贵的往返。在 Swift 中紧密集成解析 JSON 以初始化 Codable
类型也提高了性能。在解析 测试数据 的基准测试中,解码时间的改进从 200% 到几乎 500%。
治理
Swift 语言的成功是一个很好的例子,说明当一个社区为了共同的利益而走到一起时,会发生什么。
对于 Foundation,我们的目标是创建最好的基本数据类型和国际化功能,并使它们能够被世界各地的 Swift 开发者使用。它将利用语言中正在出现的新功能,并使库和应用程序作者能够充满信心地构建更高级别的 API。
为了将 Foundation 推向未来,不仅需要改进实现,还需要改进在 Apple 平台之外使用它的流程。因此,Foundation 现在为社区提供了一条路径,可以添加新的 API,以造福每个平台上的 Swift 开发者。
Foundation 软件包是一个独立的早期孵化项目。受 Swift 项目中工作组的启发,它将设立一个工作组,以 (a) 监督 社区 API 提案,以及 (b) 与 Swift 项目和 Apple 平台上的开发密切协调。未来,我们将探讨如何淘汰现有的 swift-corelibs-foundation,并迁移到使用本项目创建的新版本 Foundation。
工作组将定期开会,审查提案,关注 Swift 生态系统中新兴的趋势,并讨论如何改进库以最好地满足我们的共同目标。工作组的初始成员将在未来几周内公布。
下一步
质量和性能是该项目最重要的两个目标。因此,2023 年上半年的计划是继续改进核心 API,增加我们的单元测试和性能测试套件,并在可能的情况下扩展到其他平台,使用来自 swift-corelibs-foundation 的最相关的代码。
作为次要目标,该项目请求社区提出提案,以添加范围集中的新 API,以完善 Foundation 中现有的 API 功能。这将为探索如何在项目进展过程中添加重要的新 API 铺平道路。在 2023 年,我们的目标是接受少量具有相应 Swift 实现的提案。审查和接受这些新 API 的经验将有助于完善 API 提案流程,并促进未来扩展到更多的 API 贡献。
今年晚些时候,移植工作将继续进行,使用高质量的 Swift 实现来完成额外的 Foundation API,例如 URL
、Bundle
、FileManager
、FileHandle
、Process
、SortDescriptor
、SortComparator
等。
贡献
Foundation 欢迎社区的贡献。该项目使用 Swift 论坛进行讨论,并使用 GitHub Issues 跟踪错误、功能请求和其他工作。请参阅 CONTRIBUTING 文档以获取更多信息,包括接受社区为 Foundation 中的新 API 做出贡献的流程。
我很高兴开始 Foundation 开发的新篇章。