【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

苹果将对 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:124236

评论

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

线上GC故障:CMSGC太频繁,你知道这是什么鬼?

Java永远的神

程序员 性能优化 JVM java面试 GC

自学数据分析——重新认识数据分析

搞大屏的小北

数据分析 数据分析可视化

国内外开源数据可视化工具对比:DataEase 与 MetaBase 对比

搞大屏的小北

DataEase Metabase 开源数据可视化

让数据说话-中国农业经济发展情况

搞大屏的小北

数据可视化 经济可视化 经济发展

弹性公网IP支持多产品灵活绑定或解绑,能为企业提供独立公网IP资源!

秃头也爱科技

同是弹性公网IP,华为云弹性公网IP的优势有哪些?

秃头也爱科技

有序存储对于高性能的意义

陈橘又青

算法

预测式外呼算法模型的深度应用详解

中关村科金

人工智能 大数据 AI 智能

全网首发!华为云UCS正式商用

爱科技的水月

京东金融APP-新交互技术“虚拟数字人”赋能世界杯主题营销

京东科技开发者

大数据 前端 Web 交互 虚拟人

DataEase单点登录之OIDC

搞大屏的小北

keycloak 单点登录 OIDC

南京公安研究院与秒云达成生态合作,携手赋能产业智能化发展

MIAOYUN

智慧公安 生态合作

转转实时OLAP分析场景技术选型与应用实践

转转技术团队

OLAP

如何接受或拒绝 Excel 中的修订

在下毛毛雨

C# .net Excel 工作表 跟踪修订

用品质提升品味,贾斯特里尼&布鲁克斯葡萄酒

联营汇聚

一招搞定小白最头疼的数据大屏配色问题!

搞大屏的小北

色彩匹配 大屏配色

华为云连接CC——让多区域协同办公更高效更稳定

秃头也爱科技

DataEase 做出来好看吗?

搞大屏的小北

数据可视化 大屏可视化 DataEase

关于佛萨奇系统开发及原力元宇宙2.0佛萨奇系统开发方案

I8O28578624

【大屏设计】数据大屏间距那点事-距离产生美

搞大屏的小北

大屏布局 报表布局 看板布局排版

vivo 游戏中心低代码平台的提效秘诀

vivo互联网技术

低代码 组件化 配置化 提效

微信开放小程序运行SDK,自己的app也能运行小程序

Onegun

微信小程序 小程序容器

MySQL 慢查询日志分析(Filebeat+Elasticsearch+DataEase)

搞大屏的小北

MySQL慢查询 MySQL日志分析 MySQL日志可视化

葡萄酒越贵越好?贾斯特里尼&布鲁克斯刷新你的认知

联营汇聚

HVML 解释器 PurC 0.9.2 发布;持续演进!

hvmlenvoy

编程语言 解释器 HVML

想做运维审计大屏?用这个工具就对了!

搞大屏的小北

大屏可视化 运维审计 审计大屏

是不是你在找的推特GIF动图下载方法?!支持苹果安卓双系统使用!

frank

twitter 推特视频下载

贾斯特里尼&布鲁克斯葡萄酒,历经百年的传世经典

联营汇聚

使用DataEase分析销售数据有多方便?

搞大屏的小北

数据可视化 销售数据分析 数据展示

实践GoF的23种设计模式:命令模式

华为云开发者联盟

Go 开发 华为云 12 月 PK 榜

拒绝内卷挖掘境外新蓝海,华为云虚拟专用网络VPN有多特别?

爱科技的水月

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