蘋果公司為什麼要將 Swift 語言開源?開源後對該語言的發展會產生哪些影響?

參見 蘋果正式開源軟體開發語言Swift_TechWeb

官網: Swift.org - Welcome to Swift.org

GitHub Repo: apple/swift · GitHub

為什麼選擇在 Swift 2.0 版本開源?


為什麼選擇在 Swift 2.0 版本開源

瀉藥。我覺得主要因為1.0,1.2時代的部分語法太彆扭,Bug層出,包括但不限於:

PS:

1.切勿模仿舊Swift的語法……容易被誤導

2.知乎編輯器支持80多種語言,就是不支持Swift的語法高亮,無奈隨便選了個看起來順眼的……

0x00 類中無法聲明static成員(也叫property),只能在struct中聲明static,在1.0中得用Hack的方式(用一個struct來取),在1.2中才加入原生static

before:

class Test{
private struct sTotal{
static var total = 1
}

class var total:Int{
get{
return sTotal.total
}
set{
sTotal.total = newValue
}
}
}

now:

class Test{
static var total = 1
}

0x01 全程靠Optional解包而沒有錯誤處理,不能多路if let……會出現詭異的代碼(只是舉例,實際應該沒人這麼寫吧)

before:

func getValue(a:Int?, b:String?, c:[AnyObject]?, d:NSDictionary?, e:AnyObject?) {
if let aValue = a {
if let bValue = b {
if let cValue = c as? [String] {
if let dValue = d {
if let eValue = e as? NSData {
print("a:(aValue) b:(bValue) c:(cValue) d:(dValue) e:(eValue)")
}
}
}
}
}
}

now:

func getValue(a:Int?, b:String?, c:[AnyObject]?, d:NSDictionary?, e:AnyObject?) {
if let aValue = a, bValue = b , cValue = c as? [String] {
guard let dValue = d else {
return
}
print("a:(aValue) b:(bValue) c:(cValue) d:(dValue) e:(e as? NSData ?? NSData())")
}
}

0x02 函數內部參數名和外部參數名無法自定義是否必須,缺少了OC消息調用的可讀性

before:

func printPerson(name:String, age:Int) {
print("Name is (name) age is (age)")
}
printPerson("Bob", 18)

now:

printPerson("Bob", age: 18)

0x03 還是由於沒有錯誤處理,Cocoa框架各種函數都需要Error參數,令人困惑

before:

let createSuccess = manager.createDirectoryAtURL(folder, withIntermediateDirectories: true, attributes: nil, error: nil)
var fileError:NSError
let writeResult = encodeData.writeToFile("./1.txt", atomically: true, encoding: NSUTF8StringEncoding, error: fileError)

now:

let createSuccess = manager.createDirectoryAtURL(folder, withIntermediateDirectories: true, attributes: nil)
do {
try encodeData.writeToFile("./1.txt", atomically: true, encoding: NSUTF8StringEncoding)
} catch {
//...
}

0x04 Compiler本身也存在特定的Bug,比如說某些低版本的Swift編譯器,會把這中花括弧換行寫的Block(類似lambda,匿名函數的概念)認為是一個空的Block,後面的print看成單獨的代碼塊

let a = {(num:Int) in
{
print(num)
}
}

被誤認為

let a = {(num:Int) in}
print(num)

我的心裡是矛盾的……

0x05 更不要說當年Playground各種崩潰,Xcode遇到多行字元串,多行NSDictionary定義也會崩潰,Linker出錯,等等……在自己的OS X上都搞不好,怎麼敢開源出去……

總之……開源是好事,這樣這門語言更好的發展,而不是僅僅在iOS和OS X之類桌面/移動App上發展。畢竟一個編譯型,多範式,基於ARC,支持Functional的現代語言,至少可以嘗試用來寫System Application或者Backend Application


蘋果為什麼要將 Swift 開源?

Swift 不開源,很難進入 Linux 這塊陣地,一旦開源後,意味著 Swift 成為了桌面(OS X),移動終端(iOS)和伺服器端(Linux)的統一開發語言。

蘋果的盈利模式,是建立軟硬體一體的生態圈,通過遠超其它平台的用戶體驗吸引用戶購買蘋果硬體來獲取巨額利潤。基於這種盈利模式,蘋果已經將操作系統和自己開發的應用全部免費了,同時精心打造良好的開發者環境,讓更多優秀的公司和程序員為蘋果的應用添磚加瓦,Swift 開源應該說是蘋果這種戰略最關鍵的一步。

對於開發蘋果平台應用的公司來說,在Swift 開源後,基於 Objective-C 開發的框架和庫會加速向 Swift 遷移,使用 Swift 開發後續的應用的決心應該更加堅定,由於Swift 統一了前後端的應用開發,在僱傭Swift開發人員,使用Swift開發的生產率以及後續的維護方面,都是利好。

對於普通程序員來說,學好 Swift一門語言,就可能成為傳說中的全棧工程師,這個誘惑太大了。對於傳說中的全棧工程師,使用Swift全平台開源的特性,開發出各種新鮮酷爽的應用和框架,也已經從夢想變成了咫尺之遙的目標。

將 Swift 開源,如此多贏,蘋果何樂而不為?

為什麼選擇在 Swift 2.0 版本開源?

蘋果選擇在Swift 2.0開源,本身是一個負責任的態度,Swift1.0和1.2,只能算 Swift 語言的Alpha 和 Beta 版本,許多語言特性需要進一步確認,許多 Bug 需要修改,Swift 和 Xcode 還需要磨合,而到 Swift2.0版本,可以算是 Swift 的第一個 GA 版本,基於這個版本開源,開源代碼的質量本身有了一定的保證,也防止過早開源後重大改動的影響波及面。

開源後對該語言和其它語言的發展會產生哪些影響?

Swift開源後,即可以看到源代碼,也可以在 Linux 上編譯和運行,這將會吸引很多頂尖的程序員對 Swift 進行學習和探索,一方面會加快 Swift 的成熟和穩定,同時會產生很多思維的火花,相信不斷有新的特性增加進來。

Andriod 和 Windows上預計在不久後就可以支持 Swift,Swift 也真正的變成了全平台開發語言。遺憾的是 Xcode 現在不支持 Linux,估計短期內不會,畢竟蘋果還是希望程序員使用 Macbook 開發 iOS 應用,這樣Macbook的銷量繼續有保證。

C/C++/Java 表示淡定,Javascript 由於已經成為瀏覽器上事實的標準語言,也表示壓力不大。Node.js由於在伺服器上的穩定性表現不佳,破罐破摔,冷眼旁觀 Swift,GO表示壓力很大,Objective-C 由於被父母拋棄,已經哭暈在廁所。唯一可以肯定的一點是,開源後的 Swift 一定會是後10年~30年的主流開發語言。


swift是因為搞llvm才創作出來的。llvm是開源的,swift沒理由保持閉源。

swift現在還有最大兩個劣勢,一個是對接c++,n年前搞定objective-c++但是現在swift反而不行。另一個就是跨平台。c/c++那麼古老的語言至今還是開發主力其中原因之一就是c/c++是標準,幾乎不存在平台差異問題。

這2個劣勢會隨著開源漸漸改善。


謝邀。Swift 開源有什麼變化?恩,其實之前我貼的那篇伍星老師回答已經說得很清楚了(具體在這裡:violin king 答過的問題)。不過第二次被邀請,作為科技界的好奇編編,最愛科普,再來叨叨下淺層的一些東東:

1、新的開源社區主頁

打開網站 http://swift.org 可以看到這個新的開源社區主頁:

看看此前蘋果官網對於Swift開源的說明:

(截圖來自:Swift 2.0 - Swift Blog)

2、也就是說,不僅是iOS 和 Mac 開發語言還支持 Linux

開源的 Swift,不再是僅僅局限於 iOS 和 Mac 平台的開發語言。網站上已經有了支持 Linux 平台的 Swift 開發包,而且因開源的 Swift 是跨平台,Swift 包管理的應用範圍在今後會更加廣泛。

這裡擴展一下,其實根據Chris Lattner( LLVM 和 Swift 的作者 ,下文有介紹) 的說法,早在2015 WWDC 大會之前,Swift 背後的 LLVM就一直是開源的,Chris Lattner 本人曾寫過一篇 LLVM 介紹: 《The Architecture of Open Source Applications: LLVM》,有興趣的童鞋可以去看看。當然,這些並不意味著可以在 Windows上開發 iOS 應用的,但是,Swift 語言的開源的真正意義並在此。

另外,網站還提供了在各個平台上的環境配置指引。

這裡借用下稀土掘金日報的回答:在 Mac 平台上,我們不僅可以使用 XCode 自帶的 Swift 版本,也可以安裝最新的開發版 Swift(不過 http://swift.org 社區網站上還說明了一點,如果是提交到 App Store 的應用,則必須使用 XCode 默認的 Swift 版本進行編譯,這點需要大家注意)。

3、Swift 將所有開放的源代碼託管到Github

所有開放的源代碼託管到 Github 主頁 apple/swift · GitHub。進入主頁,Swift 的所有源代碼都可以供我們使用了。

4、Swift 社區提供郵件列表訂閱

開源社區的各種交流溝通都可在郵箱列表訂閱進行了。

那麼,Swift 會不會替換Objective-C呢?

借用雷鋒網專欄作者的回答(小女子不是程序猿,請允許我搬磚==):

目前iOS中的很多應用框架都還是Objective-C的,調用的方式是使用橋接頭文件,但未來會出現更多基於Swift的框架,今後的調用也會變為更加簡潔的方式,蘋果正在努力實現這個艱巨的任務,因為需要轉換的框架有很多。

不過很快,我們就會看到專屬於Swift的新框架,這樣的框架在Objective-C中甚至都找不到同類。這種情況的發生也會對Objective-C的後續使用造成很大的影響。

鏈接在這:Swift 開源了,Objective-C還能走多遠?

對於 iOS 或者 Mac 平台上 APP 的開發,Swift開源的影響並不明顯。因為開發 APP 還是用 XCode, Swift 版本是被限制在 XCode 自帶的範圍內。

不過從長遠來說, Swift 開源當然是一件非常好的事。 「Swift 語法本身完善了,工程上的開發效率問題也得到了解決,就差庫了。而對庫的提供,這不正是開源社區所擅長的么?」就像安卓一樣,從此以後全世界的開發者團隊都可以在 Swift 社區內探討交流。

想想也是建設社會主義的美好開端,各位程序猿開發者們,攤開你的掌心,握緊Swift吧!

以上內容只是淺層,畢竟妹子不是程序員,歡迎各位程序員來添磚加瓦。(吐槽神馬的也OK,妹子內心強大,說得在理的隨便拍)


1.Swift 可以寫系統,如果不開源只用來寫iOS或者Mac上的應用?那對現在蘋果的開發者來說並沒有特別大的誘惑力。Objective-C主要是因為iPhone的原因才有人用,就算現在也遠遠不能和Java、C++的使用人數相比。

而Swift開源後,相應的後台框架更加多,現在已經有一個名為Perfect的後台框架,開源後只會更強大,而以後對現在的iOS開發者來說前後端全用Swift寫,誘惑力是很大的。

同樣,對新學習這門語言的後台人員來說,以後也有機會開發iOS應用,這對開發人員是個很大的誘惑。

2.開源是一種趨勢,如果不開源像現在的OC,只能等蘋果增加新的語言特性,OC現在的很多特性比如Block其實是在打補丁,而且越來越難打,最終都是編譯成C或C++,雖然效率依然很高,但始終是轉換成另一種語言在執行。而開源的Swift,有各種大牛慢慢的開發出各種很牛逼的特性,會有利於Swift的進化。

3.最終還是為了吸引更多人來使用,雖然Swift是很出色的編程語言,但沒人用再優秀又怎樣?程序員還是喜歡開源的東西。


我懷疑 Apple 想跟 Golang,Rust..拼拼看能不能搶 C++ 的位置

(原因是 C++ 現在都快變成一個新語言了)


"蘋果軟體高級副總裁 Craig Federighi 在全球開發者大會上曾經表示,Swift 將成為接下來 20年 的主流編程語言"

"Swift 從68名迅速上升至了22名"

我就不拉小長文了..

1,蘋果明顯是將重心放到Swift上了,未來"有可能"替代OC

1.1,但是OC還是有必要學的.

2,揚言未來20年的主流編程語言,誰都沒法確定.

2.1,但是碼農心裡都門清,新出的一門語言,噱頭還這麼大,絕對有必要"了解""深學"一下.

個人認為: 什麼大趨勢,以後能不能用上,兼容問題等等,沒必要深研究,

目前的形式就是公說公有理,婆說婆有理,

何必把時間驗證在爭論上,有這空閑"了解"一下Swift最好.

謝邀

end


js全棧太熱門了, 所以...


開源為獲得影響力。其次對自己也是鞭策:開源證明自己代碼給能別人看了,不怕全球高手噴。

各種說趨勢的不敢苟同。為什麼是趨勢,以及為什麼趨勢蘋果就要跟上?


為什麼開源?

開源是趨勢,微軟.net也開源了。開源社區的力量有多大,去github上面看看就知道了。github上面有非常非常多優秀的開源項目及解決方案。一個軟體項目從頭開始做成本是非常非常高的,那好,有如此多優質免費資源,且都是驗證過的(簡單的方法:看star數量),那麼在構建項目的時候大部分當然會優先考慮能夠利用這些資源技術。而且現在開源技術已經非常強大,除了少數的領域,大部分軟體項目開源技術都可以滿足。

為什麼在swift2.0開源?

我想應該是這時語言已經達到了一定的成熟度,而且蘋果也認為這是一個恰當的時間。

開源以後有什麼好處?

開源之後雖然蘋果可能會喪失一部分對該語言的控制力,但更多的是會獲得開源社區非常多的貢獻,以及一個良好的生態環境。 首先,swift是非常優秀語言,而且是蘋果的下一代官方語言,必然會受到追捧。開源過後,會有更多的人願意去使用這門語言,也會有非常多的人來幫忙改進它。從商業上來講,也會有更多的公司會考慮採用其相關技術,因為開源的東西成本更低。而且有非常多的程序員願意用swift的話,蘋果就不愁沒人給他寫軟體。微軟當年多風光,那些技術多先進,然而,你看現在微軟的發展如何?現在被逼開源,然而,已經晚了10年。

一點淺見,歡迎拍磚。


開源就是想讓這門語言更流行,受眾更廣,現在都支持Linux了,意圖很明顯呀


謝邀。單從目的講,我認為有兩個:其一,集開發者之智慧,完善這門語言,尤其是三方庫。其二,吸引更多的開發者加入到蘋果的開發裡面。oc的語法對許多Java和PHP的工程師來說,有點不能接受(我身邊的同事給我的反饋),而swift的語法融合了很多語言的精華,更能吸引工程師加入。


前面總結了很多沒用的廢話,其實沒那麼複雜,你們又不是決策者在那瞎yy有什麼用。

其實就是因為時代,這個時代一個語言都不是不開源那就是夏天穿棉襖, 除非你有病。


因為微軟在兇猛開源


一方面,對於蘋果本身,開源是一種姿態,也是一種決心,表明蘋果公司對於發展該語言的長期的,決心是很大的;另一方面,促進更多的工程師學習此語言,不在局限於蘋果產品平台開發,也擴張到linux平台,慢慢的蠶食。還有,.net開源了,雖然我不太了解.net,但這些大公司應該都有前瞻性,都會對比競爭對手彼此的動作。蘋果,說到做到,2015如期開源。


開源是為了更好推廣

開源後的影響是,我們這些ios開發者都開始考慮學習swift了,之前也沒太在意它的發展,畢竟OC開發也足夠了。但現在一開源,swift就不只是一種只能運行在蘋果設備上的語言了,以後說不定你會在github看到各種用它編寫的代碼了,聽起來還是挺有趣的!


想多了吧,只是讓你給他解bug而已


喬幫主死了四年了。


不要把開源看得這麼重,有一點很多人都沒意識到,objc本身也是開源的,但是然並卵

關鍵是看庫有沒有跟得上,運勢有沒有跟得上,目前蘋果運勢還算在巔峰,成功的可能性會大一點


弱弱地問一句,編程語言開源是什麼意思?語言還有閉源和開源之說?

因為印象中的閉源是指軟體,只提供二進位文件,而不提供源代碼。這語言本身就是源碼啊....?(???‵‵)?


很明顯用的人太少,水果捉雞了。

為什麼2.0後開源,之前那麼多bug,他好意思開源?

以後的影響,那就用的人變多了,起碼學swift值了,不僅能做ios也能做點其他事了。

路還很長,估計會跟c#似的,設計的很精妙,市場不一定能拿到多少。


推薦閱讀:

你的第一個 iOS 項目是什麼?
如何評價 2016 年 4 月 23 日在上海舉辦的 SwiftCon 大會?
iPhone 6 和 6 Plus 新增的屏幕尺寸會如何影響 iOS 應用的界面設計?

TAG:iOS | 蘋果公司AppleInc | 編程 | Swift語言 |