超越
英文原文:Surpass
看完提早釋出的 WWDC 2010 演講視頻后,我覺得自己的猜測終有可能實現。雖然 Objective-C 被蘋果奉為最重要的并極力推薦的程序語言,但我確信,蘋果肯定在暗自開發超越 Objective-C 的繼任者,我把它稱作「xlang」。
蘋果曾幫助初生的開源項目 LLMV 成長為一個龐大而且成功的事業。當看到有程序語言采納 LLVM 的成果時,我總會覺得很高興,但現在似乎情況有變。
LLVM 的核心是虛擬化,即不與特定的架構關聯,也不和某一種語言關聯。如非用于學術研究,這僅可能是一種怪癖,除了一個事實:即其他很多的關聯架構用此處理匯編和調試,也就是說,和真實平臺打交道的那部分以及處在邊緣區域但并未觸及純編譯器、即時編譯器(JIT)和最優化領域的那部分已經開始了萌芽。Clang 獲得了巨大的成功,而它的能力在 Xcode 4 中被進一步增強,但人們卻很容易忘記,它是構建在 LLVM 之上的。
那些幫助 Clang 得以成為優秀編譯器的東西都將大量的應用在假設中的「xlang」編譯器上,因為 LLVM 的成果唾手可得,何須權衡取舍?低端所需的資源已經齊備,而且蘋果既完全掌握已有部件(libauto,Objective-C 的可重用垃圾收集器),又有智慧和勇氣將它迅速部署妥當。
為什么是現在?數年來,Objective-C 得到了逐步改善,而且速度正在加快。但是,Objective-C 身兼維護現有代碼和平臺的職責,又要保證其作為 C 超集的質量。盡管蘋果想要一改現狀,但是可不能亂來。改變將由上至下逐步實現,但所費時間不菲(非脆弱的實例變量)。也許 iOS 目前沒有這個問題,但以后會有,除非蘋果真的打算到時候靠邊修邊補撐著。
而 C 仍然是 C。蘋果對自己持續消減 Objective-C 的內部運作指令多感自豪,例如最近的 objc-msgSend 快速路徑。但蘋果也知道,維持一個層又不破壞 C,等于剝奪了提高效率和內存安全性的能力。如果 iOS 能將內存凍結,只維持程序某些部分的運行,你看如何?即使具備垃圾收集的 Objective-C 可以解決這個問題,但只要一個 NSValue 對象,甚至更簡單的指針,就可以擊碎這個夢想。
所以,蘋果不入 xlang 不行。但這么做會得到什么呢?
他們會獲得一個具有現代環境的現代編程語言,層次足夠低,使它具備 Objective-C 和 C 的絕大部分性能。而這一層又足夠的簡單,可供信賴。他們便可以自由地定義語法和語義。幾乎所有的 Objective-C 功能都使用 @keywords,因為它們必須與 C 無關,而且 C Block 使用 ^ ,因為它們無法在 C++ 中重載。
最后但也同樣重要的是,他們可以根據自己的喜好引導語言詞匯。我想象 C Block 的一些網格,消息和 Go 的通道將會扮演一個有趣的角色。Cocoa 之所以如此優秀的許多原因是由于異步和關注點的分離,而一個重要的模型與相關的概念可以促成巨大的改變。xlang 可以為 Cocoa 增加全新的 API,例如為 Cocoa 定制 xlang,而非為 Objective-C 定制 Cocoa。
所有這些猜想不會讓我傻到相信 Objective-C 明天就要滾蛋,甚至 10 年內都不會。與 C 兼容意味著難以割舍,這便是 Objective-C 為何仍是以此為目的的工具。但是在一個程序員常做他想的世界,某種編程語言不可能永遠合適。我要為 C 鼓吹三遍,而且要為超越 C 的東西再吹上三遍。
正如有人很清楚的了解更高級別的抽象、可選平臺、語言的現狀和平臺工具的情況,以及已露端倪的未來(編者:是在說 John Siracusa 嗎?:p),我也愿意相信。
延伸閱讀: