Swift的使用体验与生态发展之路

电子说

1.3w人已加入

描述

Swift 是一门多范式的编译型语言,是 Apple 生态中的重要开发工具 。官网介绍 Swift 的设计目的是让开发者们更容易编写和维护正确的程序,使用体验如下 :

安全:所有编码行为都以安全的方式进行。

快速:为了替代基于 C 的语言(C、C++、Objective-C),Swift 的性能必然不能相差太多,且必须持续可预测的,而不只是在一些特定情况下。

表达力强:受益于计算机科学几十年的发展,Swift 提供了足够有乐趣、现代的开发过程,且仍然在持续发展中。

Swift logo

# 诞生 #    

在 WWDC 2010 期间,Chris Lattner 刚带团队经过大量的努力完成了 Clang 对 C++ 语言的支持,任务完成虽然开心,但其中真正细节的工作也让人感到无比心累,由此 Chris Lattner 萌生了创造更好的语言的想法 [3]。

最开始 Chris Lattner 只是和  Bertrand Serlet、Dave Zarzycki 讨论这个新语言的设计,语言名字叫“Shiny”,寓意“you’re building a shiny new thing”。当时虽然已经有了很多想法,但新语言的未来其实是完全不确定的,因此在 Bertrand Serlet 的推动下,一些想法先在 Objective-C 得到了实现,比如 ARC、modules 甚至是 literals,这些特性都来自于背后 Swift 初期的一些讨论。但也有 Objective-C 无法实现的,比如内存安全,要实现内存安全意味着大部分 C 代码都要被移除,那 Objective-C 也不再是 Objective-C 。

Chris Lattner 自己实现了大部分基本架构,但一个人不可能完成所有,2011 年 4 月经过与管理层讨论后,Chris Lattner 开始拉人入伙。这也是 Swift 第一次在内部公开被审视,不可避免地收到了很多刺耳的反馈,但这可能也是很多项目成长的必经之路,批判同时意味着关注,其中可能也指明了未来的方向。

团队化运作后 Swift 发展飞快,2013 年 7 月开始 Swift 成为了苹果开发者工具部门的重点项目 。在闭门开发 4 年后,2014 年 Swift 正式发布,当时官宣标签是“Objective-C without C”,Swift 在设计上就可以与 Objective-C 共存。

# 演进 #    

Swift 1.0 在 WWDC 2014 首次亮相,由当时苹果的软件工程高级副总裁 Craig Federighi 正式发布,并邀请 Chris Lattner 上台做了 Demo 演示。发布后第一个月的下载就超过了 1100 万 。

2015 年初 Stack Overflow 的调研中,Swift 是最受喜爱的编程语言 [6]。2015 年 11 月 Swift 正式开源,代码托管在 GitHub,第一周的 clone 超过了 6 万 ,可见初期开发者对于 Swift 的好奇与热情。

SWIFT

2015 年 Stack Overflow 调研:最喜欢的语言

但 Swift 在 3.0、4.0 时期,一直有稳定性问题,几乎每年都有大变动,有一些更新是向后不兼容的,也意味着这个阶段的 Swift 还未准备好应用于大型商业项目。

2019 年 Swift 5.0 发布,终于带来了 ABI 稳定。Swift 5.0 后,不再引入大的变动,不同版本的 Swift 最终可以编译为同一个 App,这标志着 Swift 语言的成熟。2019 年另一个标志性事件是 SwiftUI 发布,意在统一所有苹果设备的开发体验。

SWIFT

Swift 的 TIOBE 指数变化及一些关键演进 

目前 Swift 有完整的工具链支撑开发,融入了苹果的开发者生态,替代 Objective-C 成为主流的苹果生态开发语言已是必然趋势。

SWIFT

2021 年 JetBrains 开发者调研:Swift and Objective-C 开发者人数对比 

值得一提的是,Chris Lattner 在 2017 年离开苹果加入了谷歌,在谷歌期间主导了 S4TF 项目,这也是 Swift 在 AI 领域的一次重要尝试。2020 年 Chris Lattner 从谷歌离职,开始了 AI 编译器的探索,目前 S4TF 项目已是归档状态,但这个尝试验证了 Swift 应用于 AI 的可行性 ,Swift 在性能上较 Python 有一定优势。

# 苹果官方生态 #    

# 工具链

官方提供的工具链是 Swift 生态的核心部分,除了 Swift 的编译器、标准库等,苹果还提供了一系列支撑学习、开发的优秀工具:

核心库 :核心库提供了比标准库更高级的功能,包括常用的数据、字符集合,单元测试,日期计算等。

调试器 & REPL :基于 LLDB 调试器开发的调试环境,同时也是交互式解释器。

包管理 SPM :与 Swift 构建系统集成,可以自动化下载、编译和链接依赖的过程。苹果官方还未提供中心仓服务,仍需要通过 git 来下载三方库,三方库的注册服务已有计划,但仍未发布 。

Playgrounds :2016 年发布,是一款适用于 iPad 的教育类 App,2022 年 5 月发布的 4.1 版本开始适用于 iPad 与 Mac,不仅仅是一款教育类 App,也可以用于开发,其中利用 iPad 性能开发的轻点拖拽等操作,进一步提升了编码过程的互动性。

# 框架

2019 年 WWDC 上,苹果发布了基于 Swift 的声明式框架 SwiftUI,可以用于开发 watchOS、macOS、iOS 等平台,基本上涵盖了所有苹果产品的系统。

Swift 和 SwfitUI 可以说是直接从语言和开发工具层面直接统一了开发者的开发体验。在 SwiftUI 推出之前,苹果不同设备的开发框架并不互通,移动端和桌面端的开发需要掌握不同的知识内容,移动端开发者需要使用 UIKit,桌面端的开发者需要使用 AppKit,WatchOS 的开发者需要使用一种类似堆叠的逻辑 。

SwiftUI 针对现有的问题给出了一些解决思路,声明式编程对比指令式的编程又加了一层抽象,比如坐标、宽度、字形字号等变量由系统接管,开发者只需要直观地告诉系统需要放置一个图像、加点文字等,由此,SwiftUI 的代码量小了很多,也可以更方便地适配不同尺寸的设备。此外,在数据流通方面,SwiftUI 在 Combine 的协助下实现了单一数据源的管理 。

在开发者的实际体验中,代码量和可读性无疑都有了本质性的提升 。

SWIFT

WWDC 2019 SwiftUI Demo 

但近期也有开发者表明自己在尝试应用 SwiftUI 到项目时遇到了问题,比如不好用的实时检查器、延迟问题等,最终直言要暂时放弃 SwiftUI 。

不可否认 SwiftUI 提供了一些很棒的思路,但目前仍未非常成熟,在真正的应用中还未达到设想的效果,要想替换 AppKit、UIKit 还有很长一段路要走。

# 学习 Swift

苹果为了追求不同设备上用户体验的一致,对于软件开发有一套非常详细严格的标准;但又必须降低开发门槛来吸引更多开发者开发苹果设备软件,因此开发工具必须足够易学好用,才能解决这个矛盾 [16]。Swift 在设计上就是一门易学习的编程语言,同时又有很多现代编程语言的特性,上限很高。

除了语言设计,文档也是学习一门语言的关键。苹果官方提供了学习文档和代码规范,也有大量三方组织或个人分享了优秀的视频图文教程,特别是对于初学者来说,可以大大降低学习成本。

此外,为了开发者能更快上手 Swift,苹果也提供了大量好用的工具,其中 Playgrounds 以代码玩游戏的设计理念更是革命性的,即使是没有编码基础的人,也可以通过 Playgrounds 迅速掌握 Swift。

SWIFT

Swift Playgrounds Demo

# 社区 #    

# Swift 开源

2015 年 Swift 正式开源,开源后社区可以直接参与到 Swift 的设计和实现。已开源的部分包括编译器、标准库、核心库、LLDB 调试器、包管理和 Xcode 的 Playground 支持 。

不过 Swift 开源项目中超过 90% 的提交还是来自苹果(除去 ci、未知等账号的提交),其次谷歌有 800+ 次提交,但占比还不到 1%,剩下其他团队或个人的提交都不超过 500 次。

除了直接贡献代码,开源社区也是用户与项目开发团队直接沟通的重要渠道,用户可以通过提交 issue 来反馈问题和建议。从 Swift 编译器项目中所有 issue 来看,每月新建 Issue 数在逐渐减少,同时 bug、Compiler 相关的 issue 数量也在逐年下降,印证了项目的稳定性。

SWIFT

每月新建 Issue 数量

SWIFT

每年相关标签的 Issue 数量

# 开发者社区

发布后开发者社区即用户社区,是语言演进非常直接的驱动力,编程语言项目团队里的开发者是写编译器的人,但可能用的还是 C++,社区里的开发者才是每天在使用 Swift 的人!用户真正的需求甚至可能改变最初设计者的想法,比如最开始 Swift 核心团队认为语言不需要 Result,但社区有很多声音说“我们需要”,因此 Swift 5 又加入了 Result 。

在语言本身的语法模块都已经稳定的情况下,社区的活跃度可以反映语言的流行程度。

Swift 在 Stack Overflow 的热度自 2016 年后持续下降,相反 Dart 从 2018 年至今热度在持续升高;在 Swift 各版本的对比中,一般刚发布后会有一个高峰,随后逐渐下降,近 3 年,只有 SwiftUI 的热度相对较高且稳定 [21]。

SWIFT

Stack Overflow 中语言热度

SWIFT

Stack Overflow 中 Swift 各版本热度

# 开发者调研

SlashData 2022 年的开发者生态报告中估计 Swift 开发者人数在 3500 万,较去年的 2500 万上升了 40%,不过因为大部分开发者还是和 Objective-C 一起使用,且由于 Objective-C 在嵌入式设备和 AR/VR 领域的应用, Objective-C 开发者的人数也上升了 50% 。

SWIFT

开发者社区活跃人数 

JetBrains 2021 年的 Swift/Objective-C 开发者调研中,有 84% 的开发者表示自己同时使用 Swift 和 Objective-C,其中已经有 64% 的开发者大部分代码是 Swift。

SWIFT

JetBrains 开发者调研:是否同时使用 Swift 和 Objective-C 

调研中绝大部分开发者(89%)并不使用 Swift 开发服务端项目,Swift 更多还是应用于客户端开发。

SWIFT

JetBrains 开发者调研:是否使用 Swift 开发服务端项目 [9]

# 三方库

对比 Java、Python 等语言,Swift 的三方库数量并不算很多。目前因为 CocoaPods 有索引功能,仍有大量开发者使用 CocoaPods 来管理项目依赖且短期内不会用 SPM 替换 [9]。CocoaPods 上共有 9 万多 Swift 和 OC 的库,其中搜索 Swift 的结果为 1 万多 。

SWIFT

JetBrains 开发者调研:使用什么工具管理依赖 

另外虽然官方没有提供三方库注册服务,但 GitHub 有一个开源项目 Swift Package Index,目前已收集了近 5000 个 GitHub 上的 Swift 项目 [24],其中 json、cli 和 networking 等标签相关的仓库较多(剔除了不同系统、框架等相关标签)。

SWIFT

Swift Package Index 中的仓库相关标签

2016 年至今每年新建的库数量并没有明显增长,甚至 2021 年、2022 年新建的库数量有所减少,不过其中约 70% 库仓库今年仍有过活跃行为。

SWIFT

Swift Package Index 中的仓库创建年份

# 应用 #    

# 官方应用

根据开发者 Timac 关于苹果使用 Swift 和 SwiftUI 的分析报告 [25],iOS 15 中二进制文件共 4738 个,其中使用了 Swift 的二进制文件共 607 个(占比 13%),使用了 SwiftUI 的二进制文件共 114 个(占比 2%),使用最多的语言仍然是 Objective-C,占比 89%。对比 iOS 14 中,使用了 Swift 的二进制文件占比为 8.4%,使用了 SwiftUI 的二进制文件占比仅为 1%,占比均有所提高。

SWIFT

iOS 系统中二进制文件使用编程语言情况

iOS 系统的编程语言仍然以 Objective-C 为主,且短时间内不会完全替换,但苹果官方对于 Swift、SwiftUI 的应用在不断加速,iOS 15 中常用应用如 App Store、Health、分屏等已开始使用 Swift,其他如 Books、Maps、Notes 等已开始使用 SwiftUI。Swift 基本上还是会和 Objective-C 一起使用,还不能完全剔除 Objective-C。

在 macOS 中,也可以非常明显地看到应用 SwiftUI 的增长,从 Monterey 到 Ventura,使用了 SwiftUI (可能同时使用了 AppKit)的比例从 4% 上升到了 10% 。

SWIFT

macOS 系统中三种 UI 框架的使用占比

整体来看,苹果官方的策略是从风险较低的少量应用开始试验,随着每次系统更新和 Swift、SwiftUI 的演进,使用比例在不断加大。

# 第三方应用使用 Swift 情况

2019 年到 2021 年,国内 Top 100 的免费应用中,Swift 混编应用的占比从 22% 上升到了 78%;国外 Top 100 的免费应用中,Swift 混编应用的占比一直较高,2019 年已有 78%,2021 年达到了 82.3% 。

SWIFT

国内外 Top 100 应用中 Swift 混编应用占比的变化趋势 

国内互联网头部厂商基本上都已经支持 Swift,但也不能代表未来将转型 Swift 技术。Swift 混编应用占比迅速提高的原因可能是受 2020 年新增的 WidgetKit 导致的,开发者若要提供应用小组件则必须使用 Swift 相关技术 [27]。

# GitHub 开源项目

2016 年至 2021 年,GitHub 上 Swift 开源项目每年新增数量变化不大,基本在 15000 至 20000 之间。GitHub 上 Swift 开源项目增长呈现的平稳趋势和前文 Swift 三方库增长、Swift 在 Stack Overflow 的讨论度变化基本一致,后续 Swift 大概率会逐步替换现有代码,有稳定的市场份额,但暂无大规模爆发的契机。

SWIFT

GitHub 上 Swift 开源项目每年新增数量

*数据来源:GH archive 

# 总计 #    

Swift 已经 ABI 稳定,语言本身基本完善。作为 Objective-C 的替代产品,与 Objective-C 兼容,足够安全、高性能,且易于学习阅读,下限低而上限高;同时有苹果官方的支持,官方系统中每年使用 Swift 混编的原生应用占比在逐年提升,官方发布的 SDK 也可能绑定使用 Swift。

但重要的框架 SwiftUI 还处于成长阶段,大部分场景 Swift 仍需要与 Objective-C 混编使用,很难单独支撑起大型项目的搭建;三方生态发展缓慢,比如在服务端、机器学习、AR/VR 等领域都没有长足发展,目前基本还是应用于客户端开发场景。

近几年 Swift 的成长不算快,应用领域相对单一,暂时没有爆发契机,但在苹果开发者生态中会继续稳定发展,在官方支持下可以逐步替换 Objective-C。下一个机会点也许在苹果新的设备,我们拭目以待。




审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分