为什么 Chrome 不创建自己的 ECMAScript 实现?

Why didn't Chrome create its own implementation of ECMAScript?

1995 年 Netscape 创建了 JavaScript,随后 Internet Explorer 也创建了 JScript。

据我了解,为了避免"Best viewed with IE"或"Best viewed with Netscape",让程序员的生活更轻松,开发了ECMAScript标准,并对JavaScript进行了标准化(JScript也采用标准)。

考虑到 JavaScript 是 Oracle Corporation 的商标,为什么像 Chrome 或 Opera 这样的现代浏览器在主要的 Web 编程语言是 JScript,而不是创建一个也符合 ECMAScript 规范的新实现?

也就是说:JavaScript是ECMA规范的Netscape/Mozilla实现,JScript是ECMAScript的微软方言。为什么 Chrome 采用 JavaScript 而没有创建,例如 Chrome 脚本或没有商标的实现?

Why didn't Chrome create its own implementation of ECMAScript?

Chrome 确实创建了他们自己的 ECMAScript 实现。 运行 他们实现 ECMAScript 的引擎被称为 V8,并且至今仍在使用。事实上,它现在被 Chrome、Edge 和 Node.js(以及其他人)使用。

当时的 public 并不真正了解 ECMAScript 这个短语 - 他们大多只是从 Firefox 了解 Javascript 并且可能知道 IE 中的 JScript。当 Javascript 被带到一个标准的机构时,他们决定他们想要一个完全没有商标从属关系的名称。用 Brendan Eich(该语言的发明者)的话来说,"ECMAScript" 选择的术语显然根本没有商标关联,而且非常丑陋,以至于没有人会在面向用户的产品中实际使用该术语。

ECMAScript 过去不是,现在仍然不是 John Q Public 知道的东西(如果不是开发人员的话)。人们从最初的 Netscape 时代就知道了 "Javascript",现在是 Firefox/Mozilla。有些人知道 Microsoft 的类似(但不完全相同)的竞争实现称为 JScript。尽管当时主要为 IE 开发的人也会将 Javascript 称为他们编写的语言。

因此,当 Google 开发了他们自己的 ECMAScript 新实现时,他们将 public 称为 Javascript。那只是用来描述它们的实现的名称。这个名字对它的传统毫无意义。 V8 Javascript 引擎是全新的,不是从其他东西衍生出来的。

总而言之,V8 被设计为与 ECMAScript 兼容,并且在 Chrome 中被 public 称为 Javascript 实现。


在历史记录中,"Javascript" 最初是在 Netscape 开发的。 "Java" 最初由 Sun Microsystems 开发。不知何故,在 Netscape 和 Sun Microsystems 之间的关系中,Netscape 被允许使用术语 "Javascript",但 Sun 实际上拥有其商标。最终,Netscape 浏览器分拆到 Mozilla 基金会,而 Sun 被甲骨文收购。所以,是的,Oracle 拥有术语 "Javascript" 的商标,但许多人被允许使用它来描述他们的 ECMAScript 实现。其他公司在不同时期更愿意完全远离任何可能的商标问题,这就是其他公司使用 JScript、ActionScript 等来命名其实现的原因。

您需要商标律师来深入了解有关使用术语 Javascript 的法律问题。

当 Mozilla 从 AOL/Netscape 分拆为一家独立公司时,他们针对是否可以继续在其代码和用户界面中使用术语 "Javascript" 进行了几次演习。其中一些记录在他们的错误系统中。我不知道决定这一切的确切法律交易,但足以说明他们在很多很多年后仍在使用 "Javascript" 这个词。当时 Sun Microsystems 并没有为此烦恼,甚至现在拥有该商标(通过收购 Sun 的方式)的更具诉讼性的 Oracle 也没有试图停止在 Mozilla 或其他地方使用它。


请记住,Chrome 中的 V8 实现了一种符合 ECMAScript 标准的语言。 Chrome 像所有浏览器一样通过将自己的全局对象添加到环境中来扩展 ECMAScript,例如浏览器中的 window 对象。浏览器中的那些全局对象在与浏览器有关的不同标准工作中进行了标准化,而不是与实际的 ECMAScript 语言有关。