生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

苹果将对 Foundation 框架用 Swift 重写并开源,网友:iOS/macOS 应用程序用吗?

  • 2022-12-22
    北京
  • 本文字数:3150 字

    阅读完需:约 10 分钟

苹果将对 Foundation 框架用 Swift 重写并开源,网友:iOS/macOS 应用程序用吗?

近日,苹果宣布将用 Swift 为所有平台创建一个统一的开源 Foundation 框架实现。通过 Foundation 的原生 Swift 实现,该项目将消除框架在 C 和 Swift 之间的转换成本,从而提高性能。该项目会为服务器端应用程序提供体量更小、细化程度更高的模块选项,同时将作为统一规范的 Foundation 实现的核心。

 

Swift 应用的基础

 

Foundation 框架为 App 和其他框架提供了基础的能力,Foundation 定义的类、协议和数据类型等在整个 macOS、iOS、watchOS 和 tvOS SDK 中通用。

 

2016 年,Swift -corelibs- Foundation 项目启动了 Foundation 的开源 Swift 版本,即在 Foundation 开源的 C 实现上封装了一个 Swift 层。Foundation 项目团队认为,随着 Swift 的发展,该框架发展战略也需要进行调整。Swift 是由苹果开发的现代通用语言。虽然用途颇多,但最主要还是用在 iOS 和 Mac 应用程序开发上。

 

前苹果工程师 Chris Lattner 在 2010 年开始构建 Swift 语言时,只是作为一个业余项目去做。当时,Lattner 在使用编程语言 C++ 时遇到了挑战。“C++ 是一种复杂的语言,”Lattner 为此花费了很大力气。“C++ 和 Objective-C 都不坏,它们是环境的产物。但我们可以做得更好。”

 

Lattner 从 Objective-C、Rust、Haskell、Ruby、Python、C#、CLU 等语言中汲取灵感,并完成了基础架构设计。当 Lattner 意识到 Swift 可能是更好的选择时,他开始寻求资金并在苹果内组建了一个团队进行研究。之后,他便带领开发小组陆续完成语法设计、编译器、运行时、框架、IDE 和文档等相关工作。

 

经过多年迭代,现在根据官网数据,在编写应用程序时,Swift 相较 Objective-C 快 2.6 倍,相较 Python 2.7 要快 8.4 倍。

 

在 Swift 之前,构建 iOS 应用程序的主要语言是 Objective-C,但越来越多的 iOS 项目都开始用 Swift 编写。移动设备市场的持续增长也为 Swift 的持续发展提供了助力。TIOBE公布的 12 月编程语言流行指数排名中,Swift 排名 15,超过 Objective-C 的第 19 名。

 

除苹果外,现在 Lyft、Uber、Airbnb、Square 等公司都在使用 Swift。随着 Swift 开发需求的提升,Swift 开发者的收入也在提高。国外网站 DevJobsScanner 最近对全球超 1000 万个开发岗进行了调研,结果显示,Swift 入选了前十大高收入编程语言,排名第七。Swift 开发者的平均年薪为 11.4 万美元,但上限报价也能达到每年 23 万美元水平。

 

如今,几乎所有的 Swift 项目都使用了 Foundation 框架。随着 Swift 应用的更多,Foundation 框架的重要性也不言而喻。



Foundation 框架在 iOS 系统中的位置

 

Foundation 框架将如何发展?

 

Foundation 框架发展愿景中的一大重要部分,就是为服务器端应用程序提供体量更小、细化程度更高的模块选项。Foundation 团队也从模块分类开始,简单介绍了下阶段的发展思路。

模块拆分

以下是官方初步整理的模块划分思路,并非最终版本,团队也正在征求社区的反馈意见。

 

  1. FoundationEssentials

 

这些模块类型在大多数应用程序中都有所使用,而且不存在额外的系统依赖性。此包可能依赖于 Collections 或 Algorithms 等关键 Swift 包,但后续出现的新依赖项保证会在不过多影响 Essentials 整体大小的前提下添加。

 

以下列出的各个类型都是在将 Foundation 打造成一个整体库,进而提供基本实用程序类、为设计模式提供先例,并在一定程度上摆脱操作系统依赖以增强可移植性。具体包括:

 

URL,Data,UUID,Date、DateInterval,PropertyListSerialization,JSONSerialization,PropertyListDecoder,JSONDecoder 及编码器,NotificationCenter,AttributedString,SortDescriptor,Measurement,Dimension,Unit,ProcessInfo,UserDefaults (范围可能受限,例如某些类型的域),FileManager,FileHandle,Process,Pipe,Bundle。

 

考虑到语言本身的进步,部分 API 也到了需要更新升级的时候。比如,团队认为 Process 这类 API 应该使用 async/await。通过将其包含在 Essentials 包中,团队希望与社区共同推进 API 迭代。不过在短期之内,现有 API 仍将正常服务于依赖它们的项目。

 

  1. FoundationInternationalization

 

以下类型主要强调更好地处理日期/时间,或者为用户呈现格式化数据:FormatStyle 协议和所有具体格式样式类型,Locale、Calendar、TimeZone、DateComponents,Locale-specific String extensions,CharacterSet(此 API 未来可能会重新设计或扩充,以更好地适应 Swift String),URLResource,LocalizedError,Morphology。

 

  1. FoundationNetworking

 

FoundationNetworking 模块已经从 Foundation 中分离出来,并将继续提供相同的网络 API。团队已经确定了 Essential 类型、特别是 URL,因此下一步就是在 Swift 当中统一 FoundationNetworking 实现,主要包括 URLSession、URLRequest、URLResponse 及其他关联类型,HTTPCookie、HTTPURLResponse 及其他关联类型。

 

  1. FoundationXML

 

FoundationXML 模块已经从 Foundation 中分离出来,并将继续提供相同的 XML 解析 API。在确定了 Essential 类型和 FoundationNetworking 之后,下一步就是在 Swift 中统一 FoundationXML 的实现,主要包括:XMLDocument、XMLDTD、XMLDTDNode、XMLElement、XMLNode、XMLParser。

 

  1. FoundationObjCCompatibility

 

以下类型主要用于同 Darwin Foundation 或遗留代码的交叉编译,主要包括:NSObject

NSValue、NSNumber、NSError、NSNull、Geometry types、NS/CGRect、NS/CGPoint、NSEdgeInsets 等。

微模块还是单体设计?

为什么不把 Foundation 中的每个类型都拆分成单独的包,以便随时可以独立导入?团队认为最好的办法应该是,在每个模块一个包跟所有模块一个包之间达到最佳平衡。

 

如果将每个组件都当作单独的模块,那模块间的关系数量就会迅速增长,而且要求确保各模块间每个接口都必须稳定且公开。一旦发现本应只用于“亲密”模块的接口实际也被用在其他地方时,可能会不经意间限制团队对整体 API 接口的未来改进空间。

 

因此,团队决定用外部依赖项来划分模块。外部依赖项通常是二进制文件显著膨胀的根源,如果对依赖项的传递控制不当,可能导致下游客户端发生冲突。

移除的类型

在 Darwin 平台上,团队需要保持全部现有 API 接口的兼容性。但团队将新的统一实现重点放在了实用性最强的那些 Swift API 上。“这代表着一种重要的思路转变,特别是对 swift-corelibs-foundation 当初提出的 100%源兼容目标的颠覆。”团队在博客中说道。Foundation 的很多功能都被包含在了语言的直接支持内,所以新包暂时不考虑引入以下类型:

 

  • RunLoop、Lock、OperationQueue、Stream、Port、Timer 等,由结构化并发替代。

  • NS 前缀集合类型- 最初是出于兼容性考虑而提供,但实用性一直不大

  • NSCoding, NSKeyedArchiver – 由 Codable 替代

  • Progress - 不存在外部依赖,但与结构化并发的重合还没有完全设计好

 

在 Darwin 上,Foundation 框架将继续通过 C、Objective-C 和 Swift 的组合维护各个类型的实现。

结束语


该消息发布后,社区很多开发者表示很开心看到这样的变化。开发者 Joakim_Hassila 留言道:“作为一个明确表示避免使用 Foundation 的人,我只想发表一个简短的正面说明——这看起来是一种非常实用的方法,并且基于可能的外部依赖关系构建模块很有意义。”

 

但是,这只是一个开始。Foundation 团队还需要为开发者解决更多技术细节上的问题,还有解答诸如哪个基金会负责、iOS/macOS 应用程序是否会使用这个新的 Swift Foundation 等项目后续发展上的疑问。

 

参考链接:

 

https://www.swift.org/blog/future-of-foundation/

https://forums.swift.org/t/what-s-next-for-foundation/61939

https://www.businessinsider.in/tech/enterprise/news/chris-lattner-who-created-the-programming-language-swift-when-he-was-at-apple-was-blown-away-by-how-fast-it-grew-now-he-says-swifts-future-is-in-machine-learning-/articleshow/74290705.cms

2022-12-22 15:124253

评论

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

面试官,不要再问我三次握手和四次挥手

猿人谷

面试 TCP 三次握手 四次挥手

微服务架构深度解析与最佳实践-第一部分

kimmking

微服务 最佳实践 深度解析 高可用

Kylin 实时流处理技术探秘.笔记

迹_Jason

大数据

纯技术改造,技术如何驱动需求,我有话说

一叶而不知秋

项目管理 架构 技术

字节跳动的增长密码

池建强

字节跳动 张一鸣

NVidia-Docker2 性能优化

薛磊

Docker gpu nvidia container

特定系统的Linux的构建

韩超

NVidia Docker介绍

薛磊

Docker

中台之路,从平台到中台的思考与实践(二)

孤岛旭日

架构 中台 企业中台 企业架构

3000w人民币的学费——我的决策反思

孤岛旭日

数据中台 架构 中台 企业中台 企业架构

基于RocketMQ实现分布式事务 - 完整示例

清幽之地

Java 分布式事务 RocketMQ 微服务

redis数据结构介绍-第一部分 SDS,链表,字典

Nick

redis 源码 数据结构 源码分析 算法

Docker Swarm 踩坑

Steve

Docker Docker Swarm 技术 容器 踩坑

程序员通过哪些方式来赚钱?

一尘观世界

程序员 外包 自由职业 副业 赚钱

服务降级的常见套路

松花皮蛋me

Java

中台之路,从平台到中台的思考与实践(一)

孤岛旭日

架构 中台 企业中台 企业架构

ELF文件格式

韩超

从西游到武侠——确定性与不确定性

伯薇

个人成长 管理 确定性 不确定性

Linux的proc文件系统编程

韩超

苏宁云商向江旭:是时候让技术成为新司机了!

TGO鲲鹏会

开源这件事儿,越来越“声势浩大”了

赵钰莹

Apache GitHub 阿里巴巴 开源 腾讯

我使用了哪些生产力工具?

Steve

效率工具 软件 Alfred Notion 推荐

【JAVA】感受下JDK14的空指针提示

遇见

Java jdk jep

聊聊分心这件事

Jackey

高手和普通人的差距,不看不知道,一看吓一跳

熊斌

学习

[KubeFlow] MPI-Operator深度解读

薛磊

Docker gpu kubeflow Kubernetes

人间至味——苦瓜

三只猫

人生 美食 生活

Gitlab CI/CD 中的 Cache 机制

Chong

DevOps gitlab cicd

Doris 一种实时多维分析的解决方案

迹_Jason

大数据

百度主任架构师谭待:打造非职权技术管理机制

TGO鲲鹏会

自动驾驶复苏在2020

陈思

人工智能 自动驾驶

苹果将对 Foundation 框架用 Swift 重写并开源,网友:iOS/macOS 应用程序用吗?_语言 & 开发_褚杏娟_InfoQ精选文章