Swift 是一門多范式的編譯型語言,是 Apple 生態(tài)中的重要開發(fā)工具 。官網(wǎng)介紹 Swift 的設(shè)計(jì)目的是讓開發(fā)者們更容易編寫和維護(hù)正確的程序,使用體驗(yàn)如下 :
安全:所有編碼行為都以安全的方式進(jìn)行。
快速:為了替代基于 C 的語言(C、C++、Objective-C),Swift 的性能必然不能相差太多,且必須持續(xù)可預(yù)測的,而不只是在一些特定情況下。
表達(dá)力強(qiáng):受益于計(jì)算機(jī)科學(xué)幾十年的發(fā)展,Swift 提供了足夠有樂趣、現(xiàn)代的開發(fā)過程,且仍然在持續(xù)發(fā)展中。
Swiftlogo
# 誕生#
在 WWDC 2010 期間,Chris Lattner 剛帶團(tuán)隊(duì)經(jīng)過大量的努力完成了 Clang 對(duì) C++ 語言的支持,任務(wù)完成雖然開心,但其中真正細(xì)節(jié)的工作也讓人感到無比心累,由此 Chris Lattner 萌生了創(chuàng)造更好的語言的想法 [3]。
最開始 Chris Lattner 只是和 Bertrand Serlet、Dave Zarzycki 討論這個(gè)新語言的設(shè)計(jì),語言名字叫“Shiny”,寓意“you’re building a shiny new thing”。當(dāng)時(shí)雖然已經(jīng)有了很多想法,但新語言的未來其實(shí)是完全不確定的,因此在 Bertrand Serlet 的推動(dòng)下,一些想法先在 Objective-C 得到了實(shí)現(xiàn),比如 ARC、modules 甚至是 literals,這些特性都來自于背后 Swift 初期的一些討論。但也有 Objective-C 無法實(shí)現(xiàn)的,比如內(nèi)存安全,要實(shí)現(xiàn)內(nèi)存安全意味著大部分 C 代碼都要被移除,那 Objective-C 也不再是 Objective-C 。
Chris Lattner 自己實(shí)現(xiàn)了大部分基本架構(gòu),但一個(gè)人不可能完成所有,2011 年 4 月經(jīng)過與管理層討論后,Chris Lattner 開始拉人入伙。這也是 Swift 第一次在內(nèi)部公開被審視,不可避免地收到了很多刺耳的反饋,但這可能也是很多項(xiàng)目成長的必經(jīng)之路,批判同時(shí)意味著關(guān)注,其中可能也指明了未來的方向。
團(tuán)隊(duì)化運(yùn)作后 Swift 發(fā)展飛快,2013 年 7 月開始 Swift 成為了蘋果開發(fā)者工具部門的重點(diǎn)項(xiàng)目 。在閉門開發(fā) 4 年后,2014 年 Swift 正式發(fā)布,當(dāng)時(shí)官宣標(biāo)簽是“Objective-C without C”,Swift 在設(shè)計(jì)上就可以與 Objective-C 共存。
# 演進(jìn)#
Swift 1.0 在 WWDC 2014 首次亮相,由當(dāng)時(shí)蘋果的軟件工程高級(jí)副總裁 Craig Federighi 正式發(fā)布,并邀請(qǐng) Chris Lattner 上臺(tái)做了 Demo 演示。發(fā)布后第一個(gè)月的下載就超過了 1100 萬。
2015 年初 Stack Overflow 的調(diào)研中,Swift 是最受喜愛的編程語言 [6]。2015 年 11 月 Swift 正式開源,代碼托管在 GitHub,第一周的 clone 超過了 6 萬 ,可見初期開發(fā)者對(duì)于 Swift 的好奇與熱情。
2015 年 Stack Overflow 調(diào)研:最喜歡的語言
但 Swift 在 3.0、4.0 時(shí)期,一直有穩(wěn)定性問題,幾乎每年都有大變動(dòng),有一些更新是向后不兼容的,也意味著這個(gè)階段的 Swift 還未準(zhǔn)備好應(yīng)用于大型商業(yè)項(xiàng)目。
2019 年 Swift 5.0 發(fā)布,終于帶來了 ABI 穩(wěn)定。Swift 5.0 后,不再引入大的變動(dòng),不同版本的 Swift 最終可以編譯為同一個(gè) App,這標(biāo)志著 Swift 語言的成熟。2019 年另一個(gè)標(biāo)志性事件是 SwiftUI 發(fā)布,意在統(tǒng)一所有蘋果設(shè)備的開發(fā)體驗(yàn)。
Swift 的 TIOBE 指數(shù)變化及一些關(guān)鍵演進(jìn)
目前 Swift 有完整的工具鏈支撐開發(fā),融入了蘋果的開發(fā)者生態(tài),替代 Objective-C 成為主流的蘋果生態(tài)開發(fā)語言已是必然趨勢。
2021 年 JetBrains 開發(fā)者調(diào)研:Swift and Objective-C 開發(fā)者人數(shù)對(duì)比
值得一提的是,Chris Lattner 在 2017 年離開蘋果加入了谷歌,在谷歌期間主導(dǎo)了 S4TF 項(xiàng)目,這也是 Swift 在 AI 領(lǐng)域的一次重要嘗試。2020 年 Chris Lattner 從谷歌離職,開始了 AI 編譯器的探索,目前 S4TF 項(xiàng)目已是歸檔狀態(tài),但這個(gè)嘗試驗(yàn)證了 Swift 應(yīng)用于 AI 的可行性 ,Swift 在性能上較 Python 有一定優(yōu)勢。
# 蘋果官方生態(tài)#
# 工具鏈
官方提供的工具鏈?zhǔn)?Swift 生態(tài)的核心部分,除了 Swift 的編譯器、標(biāo)準(zhǔn)庫等,蘋果還提供了一系列支撐學(xué)習(xí)、開發(fā)的優(yōu)秀工具:
核心庫 :核心庫提供了比標(biāo)準(zhǔn)庫更高級(jí)的功能,包括常用的數(shù)據(jù)、字符集合,單元測試,日期計(jì)算等。
調(diào)試器 & REPL :基于 LLDB 調(diào)試器開發(fā)的調(diào)試環(huán)境,同時(shí)也是交互式解釋器。
包管理 SPM :與 Swift 構(gòu)建系統(tǒng)集成,可以自動(dòng)化下載、編譯和鏈接依賴的過程。蘋果官方還未提供中心倉服務(wù),仍需要通過 git 來下載三方庫,三方庫的注冊(cè)服務(wù)已有計(jì)劃,但仍未發(fā)布 。
Playgrounds :2016 年發(fā)布,是一款適用于 iPad 的教育類 App,2022 年 5 月發(fā)布的 4.1 版本開始適用于 iPad 與 Mac,不僅僅是一款教育類 App,也可以用于開發(fā),其中利用 iPad 性能開發(fā)的輕點(diǎn)拖拽等操作,進(jìn)一步提升了編碼過程的互動(dòng)性。
# 框架
2019 年 WWDC 上,蘋果發(fā)布了基于 Swift 的聲明式框架 SwiftUI,可以用于開發(fā) watchOS、macOS、iOS 等平臺(tái),基本上涵蓋了所有蘋果產(chǎn)品的系統(tǒng)。
Swift 和 SwfitUI 可以說是直接從語言和開發(fā)工具層面直接統(tǒng)一了開發(fā)者的開發(fā)體驗(yàn)。在 SwiftUI 推出之前,蘋果不同設(shè)備的開發(fā)框架并不互通,移動(dòng)端和桌面端的開發(fā)需要掌握不同的知識(shí)內(nèi)容,移動(dòng)端開發(fā)者需要使用 UIKit,桌面端的開發(fā)者需要使用 AppKit,WatchOS 的開發(fā)者需要使用一種類似堆疊的邏輯 。
SwiftUI 針對(duì)現(xiàn)有的問題給出了一些解決思路,聲明式編程對(duì)比指令式的編程又加了一層抽象,比如坐標(biāo)、寬度、字形字號(hào)等變量由系統(tǒng)接管,開發(fā)者只需要直觀地告訴系統(tǒng)需要放置一個(gè)圖像、加點(diǎn)文字等,由此,SwiftUI 的代碼量小了很多,也可以更方便地適配不同尺寸的設(shè)備。此外,在數(shù)據(jù)流通方面,SwiftUI 在 Combine 的協(xié)助下實(shí)現(xiàn)了單一數(shù)據(jù)源的管理 。
在開發(fā)者的實(shí)際體驗(yàn)中,代碼量和可讀性無疑都有了本質(zhì)性的提升 。
WWDC 2019 SwiftUI Demo
但近期也有開發(fā)者表明自己在嘗試應(yīng)用 SwiftUI 到項(xiàng)目時(shí)遇到了問題,比如不好用的實(shí)時(shí)檢查器、延遲問題等,最終直言要暫時(shí)放棄 SwiftUI 。
不可否認(rèn) SwiftUI 提供了一些很棒的思路,但目前仍未非常成熟,在真正的應(yīng)用中還未達(dá)到設(shè)想的效果,要想替換 AppKit、UIKit 還有很長一段路要走。
# 學(xué)習(xí) Swift
蘋果為了追求不同設(shè)備上用戶體驗(yàn)的一致,對(duì)于軟件開發(fā)有一套非常詳細(xì)嚴(yán)格的標(biāo)準(zhǔn);但又必須降低開發(fā)門檻來吸引更多開發(fā)者開發(fā)蘋果設(shè)備軟件,因此開發(fā)工具必須足夠易學(xué)好用,才能解決這個(gè)矛盾 [16]。Swift 在設(shè)計(jì)上就是一門易學(xué)習(xí)的編程語言,同時(shí)又有很多現(xiàn)代編程語言的特性,上限很高。
除了語言設(shè)計(jì),文檔也是學(xué)習(xí)一門語言的關(guān)鍵。蘋果官方提供了學(xué)習(xí)文檔和代碼規(guī)范,也有大量三方組織或個(gè)人分享了優(yōu)秀的視頻圖文教程,特別是對(duì)于初學(xué)者來說,可以大大降低學(xué)習(xí)成本。
此外,為了開發(fā)者能更快上手 Swift,蘋果也提供了大量好用的工具,其中 Playgrounds 以代碼玩游戲的設(shè)計(jì)理念更是革命性的,即使是沒有編碼基礎(chǔ)的人,也可以通過 Playgrounds 迅速掌握 Swift。
Swift Playgrounds Demo
# 社區(qū)#
# Swift 開源
2015 年 Swift 正式開源,開源后社區(qū)可以直接參與到 Swift 的設(shè)計(jì)和實(shí)現(xiàn)。已開源的部分包括編譯器、標(biāo)準(zhǔn)庫、核心庫、LLDB 調(diào)試器、包管理和 Xcode 的 Playground 支持 。
不過 Swift 開源項(xiàng)目中超過 90% 的提交還是來自蘋果(除去 ci、未知等賬號(hào)的提交),其次谷歌有 800+ 次提交,但占比還不到 1%,剩下其他團(tuán)隊(duì)或個(gè)人的提交都不超過 500 次。
除了直接貢獻(xiàn)代碼,開源社區(qū)也是用戶與項(xiàng)目開發(fā)團(tuán)隊(duì)直接溝通的重要渠道,用戶可以通過提交 issue 來反饋問題和建議。從 Swift 編譯器項(xiàng)目中所有 issue 來看,每月新建 Issue 數(shù)在逐漸減少,同時(shí) bug、Compiler 相關(guān)的 issue 數(shù)量也在逐年下降,印證了項(xiàng)目的穩(wěn)定性。
每月新建 Issue 數(shù)量
每年相關(guān)標(biāo)簽的 Issue 數(shù)量
# 開發(fā)者社區(qū)
發(fā)布后開發(fā)者社區(qū)即用戶社區(qū),是語言演進(jìn)非常直接的驅(qū)動(dòng)力,編程語言項(xiàng)目團(tuán)隊(duì)里的開發(fā)者是寫編譯器的人,但可能用的還是 C++,社區(qū)里的開發(fā)者才是每天在使用 Swift 的人!用戶真正的需求甚至可能改變最初設(shè)計(jì)者的想法,比如最開始 Swift 核心團(tuán)隊(duì)認(rèn)為語言不需要 Result,但社區(qū)有很多聲音說“我們需要”,因此 Swift 5 又加入了 Result 。
在語言本身的語法模塊都已經(jīng)穩(wěn)定的情況下,社區(qū)的活躍度可以反映語言的流行程度。
Swift 在 Stack Overflow 的熱度自 2016 年后持續(xù)下降,相反 Dart 從 2018 年至今熱度在持續(xù)升高;在 Swift 各版本的對(duì)比中,一般剛發(fā)布后會(huì)有一個(gè)高峰,隨后逐漸下降,近 3 年,只有 SwiftUI 的熱度相對(duì)較高且穩(wěn)定 [21]。
Stack Overflow 中語言熱度
Stack Overflow 中 Swift 各版本熱度
# 開發(fā)者調(diào)研
SlashData 2022 年的開發(fā)者生態(tài)報(bào)告中估計(jì) Swift 開發(fā)者人數(shù)在 3500 萬,較去年的 2500 萬上升了 40%,不過因?yàn)榇蟛糠珠_發(fā)者還是和 Objective-C 一起使用,且由于 Objective-C 在嵌入式設(shè)備和 AR/VR 領(lǐng)域的應(yīng)用, Objective-C 開發(fā)者的人數(shù)也上升了 50% 。
開發(fā)者社區(qū)活躍人數(shù)
JetBrains 2021 年的 Swift/Objective-C 開發(fā)者調(diào)研中,有 84% 的開發(fā)者表示自己同時(shí)使用 Swift 和 Objective-C,其中已經(jīng)有 64% 的開發(fā)者大部分代碼是 Swift。
JetBrains 開發(fā)者調(diào)研:是否同時(shí)使用 Swift 和 Objective-C
調(diào)研中絕大部分開發(fā)者(89%)并不使用 Swift 開發(fā)服務(wù)端項(xiàng)目,Swift 更多還是應(yīng)用于客戶端開發(fā)。
JetBrains 開發(fā)者調(diào)研:是否使用 Swift 開發(fā)服務(wù)端項(xiàng)目[9]
# 三方庫
對(duì)比 Java、Python 等語言,Swift 的三方庫數(shù)量并不算很多。目前因?yàn)?CocoaPods 有索引功能,仍有大量開發(fā)者使用 CocoaPods 來管理項(xiàng)目依賴且短期內(nèi)不會(huì)用 SPM 替換 [9]。CocoaPods 上共有 9 萬多 Swift 和 OC 的庫,其中搜索 Swift 的結(jié)果為 1 萬多 。
JetBrains 開發(fā)者調(diào)研:使用什么工具管理依賴
另外雖然官方?jīng)]有提供三方庫注冊(cè)服務(wù),但 GitHub 有一個(gè)開源項(xiàng)目 Swift Package Index,目前已收集了近 5000 個(gè) GitHub 上的 Swift 項(xiàng)目 [24],其中 json、cli 和 networking 等標(biāo)簽相關(guān)的倉庫較多(剔除了不同系統(tǒng)、框架等相關(guān)標(biāo)簽)。
Swift Package Index 中的倉庫相關(guān)標(biāo)簽
2016 年至今每年新建的庫數(shù)量并沒有明顯增長,甚至 2021 年、2022 年新建的庫數(shù)量有所減少,不過其中約 70% 庫倉庫今年仍有過活躍行為。
Swift Package Index 中的倉庫創(chuàng)建年份
# 應(yīng)用#
# 官方應(yīng)用
根據(jù)開發(fā)者 Timac 關(guān)于蘋果使用 Swift 和 SwiftUI 的分析報(bào)告 [25],iOS 15 中二進(jìn)制文件共 4738 個(gè),其中使用了 Swift 的二進(jìn)制文件共 607 個(gè)(占比 13%),使用了 SwiftUI 的二進(jìn)制文件共 114 個(gè)(占比 2%),使用最多的語言仍然是 Objective-C,占比 89%。對(duì)比 iOS 14 中,使用了 Swift 的二進(jìn)制文件占比為 8.4%,使用了 SwiftUI 的二進(jìn)制文件占比僅為 1%,占比均有所提高。
iOS 系統(tǒng)中二進(jìn)制文件使用編程語言情況
iOS 系統(tǒng)的編程語言仍然以 Objective-C 為主,且短時(shí)間內(nèi)不會(huì)完全替換,但蘋果官方對(duì)于 Swift、SwiftUI 的應(yīng)用在不斷加速,iOS 15 中常用應(yīng)用如 App Store、Health、分屏等已開始使用 Swift,其他如 Books、Maps、Notes 等已開始使用 SwiftUI。Swift 基本上還是會(huì)和 Objective-C 一起使用,還不能完全剔除 Objective-C。
在 macOS 中,也可以非常明顯地看到應(yīng)用 SwiftUI 的增長,從 Monterey 到 Ventura,使用了 SwiftUI (可能同時(shí)使用了 AppKit)的比例從 4% 上升到了 10% 。
macOS 系統(tǒng)中三種 UI 框架的使用占比
整體來看,蘋果官方的策略是從風(fēng)險(xiǎn)較低的少量應(yīng)用開始試驗(yàn),隨著每次系統(tǒng)更新和 Swift、SwiftUI 的演進(jìn),使用比例在不斷加大。
# 第三方應(yīng)用使用 Swift 情況
2019 年到 2021 年,國內(nèi) Top 100 的免費(fèi)應(yīng)用中,Swift 混編應(yīng)用的占比從 22% 上升到了 78%;國外 Top 100 的免費(fèi)應(yīng)用中,Swift 混編應(yīng)用的占比一直較高,2019 年已有 78%,2021 年達(dá)到了 82.3% 。
國內(nèi)外 Top 100 應(yīng)用中 Swift 混編應(yīng)用占比的變化趨勢
國內(nèi)互聯(lián)網(wǎng)頭部廠商基本上都已經(jīng)支持 Swift,但也不能代表未來將轉(zhuǎn)型 Swift 技術(shù)。Swift 混編應(yīng)用占比迅速提高的原因可能是受 2020 年新增的 WidgetKit 導(dǎo)致的,開發(fā)者若要提供應(yīng)用小組件則必須使用 Swift 相關(guān)技術(shù) [27]。
# GitHub 開源項(xiàng)目
2016 年至 2021 年,GitHub 上 Swift 開源項(xiàng)目每年新增數(shù)量變化不大,基本在 15000 至 20000 之間。GitHub 上 Swift 開源項(xiàng)目增長呈現(xiàn)的平穩(wěn)趨勢和前文 Swift 三方庫增長、Swift 在 Stack Overflow 的討論度變化基本一致,后續(xù) Swift 大概率會(huì)逐步替換現(xiàn)有代碼,有穩(wěn)定的市場份額,但暫無大規(guī)模爆發(fā)的契機(jī)。
GitHub 上 Swift 開源項(xiàng)目每年新增數(shù)量
*數(shù)據(jù)來源:GH archive
# 總計(jì)#
Swift 已經(jīng) ABI 穩(wěn)定,語言本身基本完善。作為 Objective-C 的替代產(chǎn)品,與 Objective-C 兼容,足夠安全、高性能,且易于學(xué)習(xí)閱讀,下限低而上限高;同時(shí)有蘋果官方的支持,官方系統(tǒng)中每年使用 Swift 混編的原生應(yīng)用占比在逐年提升,官方發(fā)布的 SDK 也可能綁定使用 Swift。
但重要的框架 SwiftUI 還處于成長階段,大部分場景 Swift 仍需要與 Objective-C 混編使用,很難單獨(dú)支撐起大型項(xiàng)目的搭建;三方生態(tài)發(fā)展緩慢,比如在服務(wù)端、機(jī)器學(xué)習(xí)、AR/VR 等領(lǐng)域都沒有長足發(fā)展,目前基本還是應(yīng)用于客戶端開發(fā)場景。
近幾年 Swift 的成長不算快,應(yīng)用領(lǐng)域相對(duì)單一,暫時(shí)沒有爆發(fā)契機(jī),但在蘋果開發(fā)者生態(tài)中會(huì)繼續(xù)穩(wěn)定發(fā)展,在官方支持下可以逐步替換 Objective-C。下一個(gè)機(jī)會(huì)點(diǎn)也許在蘋果新的設(shè)備,我們拭目以待。
審核編輯:劉清
-
C語言
+關(guān)注
關(guān)注
180文章
7604瀏覽量
136685 -
SWIFT
+關(guān)注
關(guān)注
0文章
116瀏覽量
23798 -
WWDC
+關(guān)注
關(guān)注
0文章
139瀏覽量
19447
原文標(biāo)題:Swift 生態(tài)發(fā)展之路
文章出處:【微信號(hào):編程語言Lab,微信公眾號(hào):編程語言Lab】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論