跳至內容

XPCOM

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

跨平台組件對象模型(英語:Cross Platform Component Object Model,簡稱XPCOM)是Mozilla的一個跨平台組件模型。它類似微軟的組件對象模型(COM)和公共對象請求代理體系結構(CORBA)。[1]它有多個語言繫結介面描述語言(IDL)描述符,因此程式設計師可以將自己的自訂函式插入到框架中並與其他組件連接。

2015年8月,Mozilla宣布將放棄為建立Firefox附加元件而使用的XPCOM,未來將支援WebExtensions[2]Firefox的分支蒼月瀏覽器(Pale Moon)則將繼續無限期的支援XPCOM。[3]

模型

XPCOM的一項主要目的是將Mozilla應用程式環境做成一個實際的框架。它為跨平台軟體的開發人員提供一個有下列特性的開發環境:

組件對象模型使Gecko的幾乎所有功能可作為一系列組件或可重用的跨平台函式庫使用,它可以通過網頁瀏覽器或任何Mozilla應用程式的指令碼使用。應用程式必須訪問各個Mozilla XPCOM程式庫(網路安全DOM等)以使用XPCOM的一個被稱為XPConnect的特殊層,這將程式庫反射到JavaScript或其他語言。XPConnect基於XPCOM中的組件,將前端膠合為C++C程式語言,並且可以擴充為包含對其他手稿語言的支援:PyXPCOM英語PyXPCOM已提供對Python的支援。PerlConnect[4]和plXPCOM[5] 提供對Perl的支援,並且仍在努力增加通用語言架構(CLI)和Ruby語言對XPConnect支援。

對開發者來說,XPCOM允許使用C++CJavaScriptPython等已提供「繫結」的語言編寫組件,並可在幾十個Mozilla支援的平台上編譯和執行這些組件。

靈活的重用來自Gecko程式庫的XPCOM組件和開發能執行在不同平台的新組件有助於快速應用程式開發,並能使應用程式更高效和易於維護。例如,XPCOM組件集中的網路程式庫就可以被任何Mozilla應用程式訪問和使用。檔案I/O、安全、密碼管理以及設定檔也都有單獨的XPCOM組件,程式設計師可以在開發自己的應用程式時使用。

批評

XPCOM為不同使用上下文(例如不同語言)下的編組英語Marshalling (computer science)對象添加了大量代碼。這導致XPCOM中基於系統的代碼出現膨脹英語Software bloat。這也是蘋果公司復刻KHTML(現在已被多個網頁瀏覽器使用,包括Safari)來建立WebKit引擎而非在其瀏覽器中採用基於XPCOM的Gecko彩現引擎的原因之一。[6][7]

Gecko的開發人員目前正在嘗試減少Gecko排版引擎中XPCOM的過剩使用。此過程在Mozilla內通常被稱為deCOMtamination[8]

參見

  • XULRunner – XULRunner是一個執行時,它的用途是啟動多個像Firefox和Thunderbird那樣的XUL + XPCOM的應用程式。

參考資料

  1. ^ Comparison with COM, GObject, SOM, Objective-C, Windows Runtime
  2. ^ Kev Needham. The Future of Developing Firefox Add-ons. 2015-08-21 [2015-09-07]. (原始內容存檔於2015-09-05). 
  3. ^ Pale Moon future roadmap. Pale Moon. 2016-05-09 [2016-06-08]. (原始內容存檔於2021-04-01). 
  4. ^ module ownership governance system. [2016-12-12]. (原始內容存檔於2009-07-01). 
  5. ^ Perl XPCOM project. [2016-12-12]. (原始內容存檔於2018-12-04). 
  6. ^ Jorge O. Castro. Ars Technica sits down with Scott Collins from Mozilla.org. Ars Technica. June 15, 2004 [2016-12-12]. (原始內容存檔於2011-12-23). 
  7. ^ Ryan Paul. Why Mozilla is committed to Gecko as WebKit popularity grows. Ars Technica. September 9, 2008 [2016-12-12]. (原始內容存檔於2012-02-11). 
  8. ^ Gecko:DeCOMtamination. [2016-12-12]. (原始內容存檔於2021-03-29). 

外部連結