跨平台组件对象模型(英語: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). 

外部链接 编辑