0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

工程师邓生 来源:编程语言Lab 作者:IceY 2022-09-14 18:01 次阅读

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

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

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

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

Swiftlogo

# 诞生#

在 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 的好奇与热情。

937b4296-3102-11ed-ba43-dac502259ad0.png

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

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

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

93944282-3102-11ed-ba43-dac502259ad0.png

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

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

93c3b454-3102-11ed-ba43-dac502259ad0.png

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 的协助下实现了单一数据源的管理 。

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

93fd2c20-3102-11ed-ba43-dac502259ad0.png

WWDC 2019 SwiftUI Demo

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

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

# 学习 Swift

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

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

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

9443c464-3102-11ed-ba43-dac502259ad0.png

Swift Playgrounds Demo

# 社区#

# Swift 开源

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

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

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

948596f0-3102-11ed-ba43-dac502259ad0.png

每月新建 Issue 数量

94a74d18-3102-11ed-ba43-dac502259ad0.png

每年相关标签的 Issue 数量

# 开发者社区

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

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

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

94c7057c-3102-11ed-ba43-dac502259ad0.png

Stack Overflow 中语言热度

94ee73e6-3102-11ed-ba43-dac502259ad0.png

Stack Overflow 中 Swift 各版本热度

# 开发者调研

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

95082868-3102-11ed-ba43-dac502259ad0.png

开发者社区活跃人数

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

952c5e72-3102-11ed-ba43-dac502259ad0.png

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

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

95480cf8-3102-11ed-ba43-dac502259ad0.png

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

# 三方库

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

955ebbce-3102-11ed-ba43-dac502259ad0.png

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

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

9571fdba-3102-11ed-ba43-dac502259ad0.png

Swift Package Index 中的仓库相关标签

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

9585423a-3102-11ed-ba43-dac502259ad0.png

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%,占比均有所提高。

95a56722-3102-11ed-ba43-dac502259ad0.png

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% 。

95c12584-3102-11ed-ba43-dac502259ad0.png

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

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

# 第三方应用使用 Swift 情况

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

95ecbf8c-3102-11ed-ba43-dac502259ad0.png

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

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

# GitHub 开源项目

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

9614b4b0-3102-11ed-ba43-dac502259ad0.png

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

*数据来源:GH archive

# 总计#

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

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

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




审核编辑:刘清

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

    关注

    180

    文章

    7523

    浏览量

    127552
  • SWIFT
    +关注

    关注

    0

    文章

    89

    浏览量

    23698
  • WWDC
    +关注

    关注

    0

    文章

    133

    浏览量

    19314

原文标题:Swift 生态发展之路

文章出处:【微信号:编程语言Lab,微信公众号:编程语言Lab】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    首个鸿蒙生态创新中心在深揭幕,开启鸿蒙产业新篇章共绘鸿蒙原生应用开发新篇章

    首个鸿蒙生态创新中心在深揭幕 开启鸿蒙产业新篇章 2024年3月19日,鸿蒙生态创新中心揭幕仪式在深圳举行,标志着鸿蒙产业发展迈出新的坚实步伐。深圳市人民政府副秘书长黄强,华为终端BG首席运营官何刚
    发表于 03-20 09:55

    探讨Matter的生态构筑及未来发展

    关于智能家居的美妙畅想,可以从1995年比尔·盖茨在《未来之路》一书中对未来屋的描绘言起,但近三十年过去了,距离真正实现“万物皆备于我”的家居生态似乎还有着一定距离。
    的头像 发表于 01-17 10:57 496次阅读

    诚迈科技与鸿蒙生态服务公司签署合作协议,共谋鸿蒙生态创新发展

    1月5日,诚迈科技与鸿蒙生态服务公司正式签署合作协议。双方将整合各自优势资源,共同推进鸿蒙在各行业的深度融合和创新发展,共同繁荣和发展鸿蒙生态。诚迈科技助理副总裁王燕、鸿志事业部总经理
    的头像 发表于 01-09 14:47 282次阅读
    诚迈科技与鸿蒙<b class='flag-5'>生态</b>服务公司签署合作协议,共谋鸿蒙<b class='flag-5'>生态</b>创新<b class='flag-5'>发展</b>

    “踩坑”经验分享:Swift语言落地实践

    Swift认为字符串是由一个个字形群集 (grapheme clusters)组成的,字形群集的大小不固定所以不能用整数去索引 (字形群集其实就是Swift中的Character(字符)类)。
    的头像 发表于 12-28 17:37 405次阅读

    生态发展 人才先行 | 深开鸿亮相首届OpenHarmony人才生态大会

    等专家学者出席大会,共同探讨OpenHarmony人才生态建设成果、实践经验及未来发展。 深开鸿作为OpenHarmony生态领航贡献和先行
    的头像 发表于 12-13 16:05 158次阅读

    【限量门票】繁荣生态,人才先行︱首届OpenHarmony人才生态大会即将在上海召开

    单位代表等,介绍OpenHarmony社区生态及人才进展、展示OpenHarmony操作系统的技术革新、分享阶段性技术成果,围绕OpenHarmony人才生态发展中面临的各种问题、挑战与实践,一同探索
    发表于 12-04 16:30

    【报名开启】繁荣生态,人才先行︱首届OpenHarmony人才生态大会即将在上海召开

    共建单位代表等,介绍OpenHarmony社区生态及人才进展、展示OpenHarmony操作系统的技术革新、分享阶段性技术成果,围绕OpenHarmony人才生态发展中面临的各种问题、挑战与实践,一同
    发表于 12-04 16:23

    OpenHarmony亮相MTSC 2023 | 质量&amp;效率共进,赋能应用生态发展

    应用生态发展 OpenHarmony 分论坛的主题是“优质高效测试助力 OpenHarmony 北向应用生态赋能”。OpenHarmony 项目管理委员会(PMC)测试代表、兼容性工作组委员高涵一主持
    发表于 11-28 15:41

    上海站报名启动! 2023年开源产业生态大会OpenHarmony生态分论坛

    操作系统。近日,OpenHarmony 4.0 Release版本正式发布,目前已有超过6200名共建者、51家共建单位,贡献代码行数超过1亿行。 此次OpenHarmony生态分论坛将分享开源技术发展
    发表于 11-24 14:55

    陈海波:OpenHarmony技术领先,产学研深度协同,生态蓬勃发展

    。 根深叶茂,OpenHarmony四大技术架构竞争力领先,生态蓬勃发展 OpenHarmony以“面向万物智联世界,构建分布式全场景协同的开源操作系统基座与生态系统”为技术愿景,秉持“生态
    发表于 11-06 14:35

    技术筑生态 智联赢未来,第二届OpenHarmony技术大会圆满举行

    了OpenHarmony在推动千行百业数字化转型中的重要作用。他表示,OpenHarmony自2020年9月10日开源以来,已经走过了不凡的三年,得到了广大开源贡献者的热情投入,不断推动着操作系统的技术进步和生态发展
    发表于 11-04 14:59

    生态伙伴 | 华秋硬创联合湾加速,共同加速企业发展

    企业发展。 湾加速联接了科创企业与上市公司、投资机构等生态伙伴,为企业提供产业赋能、资本赋能、教育赋能、品牌赋能、政策赋能五大赋能和一站式创业加速服务。 权益介绍 助力第九届中国硬件创新创客大赛,湾加速为
    发表于 06-16 16:00

    如何使用Swift提高代码质量

    京喜APP最早在2019年引入了Swift,使用Swift完成了第一个订单模块的开发。
    的头像 发表于 05-19 09:42 284次阅读
    如何使用<b class='flag-5'>Swift</b>提高代码质量

    OpenHarmony生态贡献获肯定,华秋践行加速硬件创业初心

    ****OpenHarmony开源两年多以来,在开放原子开源基金会以及多方力量的共同努力下,生态持续繁荣发展。OpenHarmony项目群工作委员会主席候培新表示OpenHarmony社区生态
    发表于 04-21 17:18

    华秋践行加速硬件创业初心,OpenHarmony生态贡献获肯定

    ****OpenHarmony开源两年多以来,在开放原子开源基金会以及多方力量的共同努力下,生态持续繁荣发展。OpenHarmony项目群工作委员会主席候培新表示OpenHarmony社区生态
    发表于 04-21 17:12