【问题标题】:Why firefox is written in C++ and javascript UI?为什么 firefox 是用 C++ 和 javascript UI 编写的?
【发布时间】:2011-04-17 22:19:37
【问题描述】:

嗯..我现在正在学习 java,我很想知道这会带来显着的性能提升吗?如果许多开发人员都在遵循类似的 Windows 编程方法(C++ 后端和 Java UI)或使用其他语言(如 python)?

*this : C++ 后端和其他语言的 UI,而不是使用其他语言编写整个程序。

【问题讨论】:

  • JavaJavascript 之间存在巨大差异 - 它们是完全不同的语言。
  • 我假设存在一些语言问题,但您提出了三个不同的问题,没有一个是完整的想法。 (当你说“这会产生明显的……”时,“这个”是什么?)
  • 你想错了。除了类似 C 的语法和名称的前四个字母外,它们没有任何共同之处。
  • 品牌认知,营销,简单明了。它最初被称为 LiveScript,但由于 Java 是 90 年代中后期的大事,所以将第一部分改为 Java。当然还有其他原因,但这是最常说的原因。

标签: javascript c++ firefox


【解决方案1】:

首先,Java 和 JavaScript 是完全不同且不相关的语言。 Firefox 使用 JavaScript;它根本不使用 Java。

其次,这样做不是出于性能原因,而是为了更简单地编写可在任何平台上与 Firefox 一起使用的附加组件和扩展。 C++ 代码需要编译,一旦编译将只能在编译它的平台上运行。 JavaScript 是一种解释性语言,它在嵌入在浏览器中的解释器中运行,因此相同的扩展通常可以在 MacOS、Linux 或 Windows(或任何其他运行 Firefox 的平台)上运行。

是的,还有其他程序使用脚本语言来实现这种目的(以便于自定义和扩展)。例如《文明4》的UI和游戏逻辑就是因为这个原因完全用Python和XML编写的,而性能密集型的图形代码仍然是C++。

【讨论】:

  • 《文明 4》以运行速度非常慢和消耗大量内存而臭名昭著。
  • 这不只是支持它没有出于性能原因完成的观点吗? ;)
  • 如果您不打算让其他人定制或增强您的程序,那么包含嵌入式脚本语言通常没有多大意义,因为您作为开发人员总是可以只更改原始源代码。
  • 这是一种有点落后的方式来看待为什么 Mozilla 平台 是这样的。 Gecko 是 Firefox 背后渲染网页和 UI 的引擎,从一开始就被设计为一个跨平台的应用程序框架。这就是事实。虽然 Firefox到目前为止是基于 Gecko 构建的应用程序的最突出示例,但其他应用程序确实存在。见XULRunner。由于各种原因,该平台从未真正起飞。一是 Gecko 普遍认为“臃肿”,但我也发现 XUL 文档严重缺乏。
  • 这不仅仅是关于附加组件。在 JS 中编写(并避免内存安全问题)核心应用程序代码比在 C++ 中更容易和更快。
【解决方案2】:

这个问题真的没有任何意义,除非你真的在问你是否应该将你的应用程序实现为 XUL 应用程序。 Javascript 本身并没有为您提供构建用户界面的任何东西。 Firefox 中的大量代码是 C++ 代码,用于为 Javascript 组件提供 UI 框架。

【讨论】:

  • +1 这是我错过的重要一点。 Firefox 中的 JavaScript(以及 Civ IV 中的 Python 等)不会创建 UI,它允许第三方自定义修改 用户界面。
  • 我是初学者。我不应该知道这一切,否则我一开始就不会问!
  • @Ahmed 我并不是因为你不知道而责备你——我只是在告诉你真相。 Javascript 根本不是为浏览器之外的任何东西确实 提供 UI 框架的其他东西(如 Firefox 本身)构建 UI 的方法。此外,您可能应该了解反对票的真正用途。
  • Javascript 定义了 Firefox 中 UI 的行为,就像它在 HTML 中一样,所以我会说它确实创建它。存在改变 Firefox 中几乎任何东西的巨大能力,因为 UI 的构建方式与扩展 (XUL/CSS/JS) 相同。使用 C++ 硬编码的 UI,你最终会得到一个像 Chrome 一样的扩展系统,它提供的功能几乎不比 Greasemonkey 脚本强。使用 Gecko 引擎进行 HTML 渲染但 UI 使用原生 API 的 Web 浏览器,例如 K-meleon 和 Camino,在扩展能力部门同样受到限制。
  • 是的,Javascript 代码告诉 UI 代码该做什么,但我的观点是,只要将 V8 链接到 C++ 代码中,您实际上并没有比您拥有更多的 UI 框架之前。当然,这可能是一个好主意如果你想要更多的未来灵活性或插件/附加架构或其他任何东西,但在路上你也是需要确定一个实际的 UI 工具包来绘制线条、框、圆、仓鼠和文本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-26
相关资源
最近更新 更多