2010年7月8日星期四

Carbon & Cocoa

簡單地說,Carbon和Cocoa 都是Mac OS X的API,也就是在OS X上寫程式,所必須用到的程式庫。就好像在Windows上要用MFC或Win32 SDK,在X-Window上有 Qt/Gtk 等等。

那為什麼又會有「兩套」程式庫呢?熟悉 Windows 程式設計的人可能已經在猜了:「喔,一套是『低階』的程式庫,像是用 C 寫的 Win32 SDK,一套是『高階』程式庫,像是 C++ 寫的 MFC,對吧?」

答案呢,並不完全正確。Carbon 和 Cocoa 是兩套歷史背景不同的 API。因為我從是從 OS X 才開始使用 Mac 的人,講太多歷史背景可能會露餡。英文版 Wikipedia 上倒是有兩篇不錯的文章 (Wikipedia: Carbon / Cocoa )簡介這兩套 API 的故事,有興趣的朋友可以前往閱讀。

不過,我還是就我有限的認識,說明一下 Carbon 和 Cocoa 的背景。Carbon 是 Apple 自 OS 9 時代末期,為了協助開發者將舊程式移植到 OS X ,所提出的 API 架構。當時有個名詞叫「碳化」(Carbonize),意思是把 OS 9 時代的程式,套上 Carbon 重新編譯,成為 OS X 的軟體。大多數 OS X 上的大型應用程式,都是從這條線過來的,例如 Adobe 系列的程式,微軟的 Word, Excel 等,它們全是 Carbon 寫的應用程式。

Cocoa 就比較有傳奇色彩一點。用最簡單最簡單的說法:Cocoa 就是當年 NeXTSTEP 作業系統的 API。Apple 當年決定把 NeXTSTEP 買下,採用 Mach-BSD 為基底的作業系統的同時也引進了這套以 Objective-C 寫成的 API。說 Cocoa 「就是」NeXTSTEP 並不是太誇張的說法,因為所有 Cocoa 的 API ,都是以 "NS" 的名稱開頭的。NS 就是 NextStep 的縮寫。晚近的應用程式,例如 Safari, TextEdit, 可愛的 Adium,就都是用 Cocoa 寫成的了。

那麼,Carbon 和 Cocoa 的關係是什麼?差別又在哪裡?就某些方面來說,Carbon 的確是較「低階」的 API,而 Cocoa 也的確有相當多的實作,底層是呼叫 Carbon。但偶爾也有 Carbon 呼叫Cocoa 的情形。

就 OS X 目前的發展趨勢,Carbon 和 Cocoa 是並行發展的。Carbon 仍然主要供 C/C++ 程式設計者使用,而 Cocoa 主要供 Objective-C/Objective-C++/Java (沒錯,Cocoa 據說有相當好的 Java 支援)的程式設計者使用。由於 Mac 上仍有相當多的重量級軟體使用 Carbon ,Apple 一時三刻間是不可能宣佈 Carbon 淡出的。

所以,與其說 Carbon/Cocoa 是兩套「平行」的 API,不如說它們是互補的 API。Apple 的「搜循功能」API(以及即將在 10.4 Tiger 中導入的 Spotlight 技術),便只有 Carbon 的 C API 可用。至於 Apple 大大有名的 WebKit 和TextView (讓你可以在「十五分鐘內寫一套功能完整的編輯器/瀏覽器」),則只有 Cocoa 套件可用。

标签: , ,


评论: 发表评论

订阅 博文评论 [Atom]





<< 主页

This page is powered by Blogger. Isn't yours?

订阅 博文 [Atom]