Swift和Objective-C的前世今生

2018/03/18 posted in  swift comments

要充分了解Swift的出現意義,就先要從Objective-C的歷史開始說起。

為甚麼寫App要用Objective-C?

  1. 話說在1985年,Apple創辦人Steve Jobs權力被架空,憤而辭職,然後帶了幾個以前的同事在外成立了新科技公司NeXT

  2. NeXT打算開發NeXTSTEP,一個Unix-like的作業系統。

  3. Objective-C誕生於1986年,NeXT在1988年購買了版權,用來開發了AppKit和Foundation Kit,和基於它們的Interface Builder(IB),成為NeXTSTEP軟件的主要開發工具。

    • (Foundation Kit有點似層相識吧)
    • (順帶一提,第一版的C++出現在1985年,前身名為"C with Classes",和Objective-C一樣旨在加入Object-oriented的功能到C裡面。)
  4. Apple在1996年尾又收購了NeXT,並讓Steve Jobs回到Apple重新執掌CEO一職。

  5. Apple在接收NeXT的技術和人才後,決定推出Macintosh系統的第十個Major version,並命名為OS X,第一個推出的消費者版本就是2001年的OS X 10.0。

    • (所以為甚麼macOS或OS X的版本號全都是10.x,例如High Sierra就是10.13)
  6. 因此OS X也繼承了NeXT傳統,使用了Objective-C為官方開發工具的語言,並把新的framework命名為Cocoa。

自此基本上奠定了Objective-C在Apple生態中的地位,而及後的iOS也是從OS X借用了很多工具和規範,OS X的Cocoa也變成了iOS的Cocoa Touch(顧名思義了)。

所以我們寫iOS App會用Objective-C,全都由於以上的歷史原因。

Swift的誕生

知道了Objective-C的歷史,就應該明白它有多古老,即使Apple一直在改進它,也只不過是小修小補。Apple需要一個更先進,更為他們度身訂造的新語言,才能方便開發者,吸引他們留在Apple的生態圈,增加競爭力......

Swift就是帶著取代Objective-C的使命來到世上,拯救世人

特點

  1. 安全:Swift是一個strong-typed language,它希望盡可能在開發的時候就能發現到unexpected的bug
  2. 快速:在支援各種fancy功能的同時,也要有比得上C-based languages(C, C++, ObjC)的速度
  3. 易於表達:簡化語法,方便開發人員,學習門檻也降低

About Swift

Pointer

另外,由於Objective-C來自C family,語法上經常會使用pointer reference。
Swift就像是Objective-C without C
,收起各種到處飛的pointer,轉用更簡潔更安全的語法。要用的話,只能用UnsafePointer強行無時無刻都提醒你不要用

Optional

經常我們看到的Swift code都有共同特點,就是各種問號(?)感嘆號(!)到處飛。
它是Swift的一大功能,確保不會出現runtime時嘗試access null的properties,發生像Javascript TypeError: 'undefined' is not an object 的錯誤。

詳細容日後再談。

後記

Swift對整個IT業界的意義

最近看到一篇2014年的文章,談論Swift的重大意義,其中有一段說到Javascript的問題,頗為有趣:

Javascript, and technologies like Node.JS and Angular in web browsers are increasingly compelling, but also a dead-end.

Javascript一些來自遠古時代的語言設計並不好,但由於大家不停投放資源、時間在它身上,製作出各種便利工具和龐大的生態圈,使得Javascript成為了Web開發中唯一的選擇。
Javascript的壯大正正是Web的故步自封,很多美妙的功能只能建造在糟糕的語言上,使Web開發鑽進了死胡同。

我覺得Javascript也有ES6, ES7一直在改進語法,同時也要顧及到Web運行環境太複雜,不能一刀切更換新語言,不可和身處Apple生態圈的Swift比較。

但不失為一篇有趣的文章,有興趣可以看看原文。