Foundation 软件包预览现已发布
我很高兴地宣布,未来 Foundation 的预览版现已在 GitHub 上发布!
此预览版提供了一个统一的 Foundation 实现,使用 Swift 编写,速度更快、更安全,并且对新的贡献者更友好。
新的 Foundation 工作组将负责审查拟议的 Foundation API,并协调 Swift 社区与 Apple 工程团队的需求。
虽然新的软件包尚未完成,但它提供了我们统一的 Swift 实现的第一个构建块,我渴望将其提供给 Swift 社区,以进行早期测试和贡献。
当前状态
以下类型在预览软件包中可用,稍后将推出更多类型。许多类型,包括 JSONEncoder、Calendar、TimeZone 和 Locale 都是全新的 Swift 实现。FormatStyle 和 ParseStyle 首次作为开源提供。
- FoundationEssentials
AttributedStringDataDateDateIntervalJSONEncoderJSONDecoderPredicateString扩展UUID
- 国际化
CalendarTimeZoneLocaleDateComponentsFormatStyleParseStrategy
为了在非 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 开发的新篇章。