Objective-C之父Brad Cox訪談:我的程式設計之路

csdn發表於2014-10-09

  眾所周知,Brad Cox與Tom Love一起創造了iOS/MAC平臺的首選開發語言Objective-C。構建於C語言之上的Objective-C其理念來自於公認的第二個物件導向的程式設計語言和第一個真正的整合開發環境的Smalltalk。日前,原文作者Dave Dribin採訪了Brad Cox,一起來了解下這位大神級人物,是如何看待他的程式設計之路。

Brad Cox和他的愛犬

  Q:請您簡單做個自我介紹以及與Objective-C的關係,謝謝。

  Brad Cox:我之前在ITT實驗室工作,在那裡結識了Tom,我們都有興趣為人們帶來高效的協作系統,但不同於郵件和實時通訊等應用;現在人們習慣稱呼這類系統為Groupware(群組軟體)。我們發現在C語言上很難實現想法,當接觸了Smalltalk以及物件導向的概念後,我想我們是時候要做出改變了,我們要創造一個更好用的基礎平臺。初期版本是有關Sed和AWK的工具集合,後來發展為基於lex和yacc的語言。而今天它還可以作為組合語言的生成工具。

  Q:方括號可以說是Objective-C的特色,請問這是您的傑作嗎?

  Brad Cox:是的,其實我就想看看有什麼還沒使用過的,花括號有了,圓括號有了,最後就是方括號了,我希望人們使用時不會與C語言等類似的混淆。

  Q:有什麼功能您當初想新增的,但限於當時的技術和時間等制約因素,而最後沒有完成?

  Brad Cox:的確曾有過不少想法。例如Smalltalk中的閉包概念,垃圾回收機制,解釋型語言等。這些想法後來通過不同形式被實現了,但是沒有任何一個類在C語言中是絕對適合的。

  今天這些的確都一一成為了現實。在Mac OS X 10.5中,給出了垃圾回收機制;在10.6中,也就是雪豹版本,在Objective-C中新增了閉包處理。

  Brad Cox:是的,我一直是閉包的擁護者,但是要進入呼叫者的堆疊的確是需要一定的技巧。

  Q:在靜態和動態還一直爭論不休的時候,Objective-C做了個跨界整合,動態的執行時環境和靜態的編譯。這是故意而為還是意外行為?

  Brad Cox:事實上,很多功能是在我之後釋出的。而當時我直接參與的,是在C的靜態基礎上簡單地新增動態支援。而後來,靜態支援是在這之後發展起來的。Objective-C的功能都是希望為大家帶來非常輕量級的工具,這也是Objective-C一直追求的。

  與純靜態的C++和Java相比,Objective-C的動態型別支援的確非常好用。

  Brad Cox:可能是多了一種輕巧的預設元件方式組合。

  Q:蘋果iPod和iPhone的銷量超過了3千萬,看到如此多的手持裝置執行在Objective-C之上,那感覺是怎麼樣的?

  Brad Cox:這感覺美妙極了。

  Q:語言的設計是非常呆板的。過去20多年間出現Java、C#、Python及Ruby等都與Objective-C有很大不同。函式式語言似乎稍稍打破了沉悶的環境。對於語言設計的下一個重大事件或功能,您有什麼看法呢?

  Brad Cox:嗯,函式式語言現在變得熱門了。我也曾嘗試過,但是語法這個環節我就碰了壁。可能還欠點緣分。

  Q:您覺得是語言的選擇影響了最終軟體質量,還是說全部的面嚮物件語言其實都大同小異?

  Brad Cox:我想他們大體上都是差不多的。

  Q:從您近期釋出的訊息和您的新作品<<Superdistribution>>一書中,不難看出您關注的焦點轉移到了軟體元件部分。請問能更多地講述您現在的興趣點嗎?

  Brad Cox:其實我沒有轉變焦點,請記得,為人們帶來輕巧實用的功能是我創造Objective-C的初衷。對於我有關元件的關注,其實是我希望能找出有效幫助打造協作系統的辦公自動化元件,所以說我並沒有轉變,只是希望幫助語言設計找到一個繞彎的方法到達相同的目的地。有關元件方向的更多介紹,請進入我的個人部落格進行了解。

  另外,我對OSGi模組化架構有非常大的期待。一旦流行起來,它將扮演非常重要的角色。雖然上手有一定難度,但是儘早學習是我的建議。

  Q:可以分享更多有關OSGi的看法嗎?

  Brad Cox:好的。OSGi執行在Objective-C上可能不太合適,但是在其它的Java平臺運作良好。一些主流的IDEs開發平臺,如Netbeans和Eclipse,是一個能實現過渡到基於OSGi元件的中間平臺。而隨著技術的日漸發展和逐步成熟,將來或會成為人們日常工作的一部分。

  Q:OSGi會替代jars嗎?還是會與jars相結合?

  Brad Cox:我傾向於後者。

  Q:是metadata提取物?

  Brad Cox:是的。一個OSGi bundle可以看成是一個metadata的jar提取物。因此也可以說是在JVM中的小型SOA(基於服務架構)服務。他們擁有自己的生命週期,能實現離線等待等處理。

  Q:這樣一來,能實現線上元件更新而不用把整個系統關閉?

  Brad Cox:沒錯。一個典型的做法是在虛擬機器中執行OSGi,然後等候它來完成升級過程。這需要花時間來熟悉。這個模型與Java中不斷建立—銷燬的過程不太一樣。

  英文出自:Mactech

相關文章