最近,LinkedIn 的 JavaScript 组提出了一个有趣的问题:

是否需要重塑 JavaScript?

这个问题确实让我陷入了思考。

毫无疑问,JavaScript 的品牌存在问题:

  1. 在该语言的官方规范实际上被称为 ECMAScript —— 负责监督该语言规范的 Ecma International 标准组织对此有点笨拙。

  2. 正确地说法应该是 “JavaScript” 是指 Mozilla 指定的 ECMAScript 的子集,但是这个词可用来表示多个不同的 ECMAScript 超集,具体取决于其上下文意思。

  3. JavaScript 是 Oracle Corporation 的商标,这与该语言作为 Web 平台中心组件的位置不太吻合,它完全是用开放的技术和标准构建的。

  4. 甚至没有正式的 JavaScript 徽标,更不用说像 Go 的地鼠或 PHP 的大象这样的可爱吉祥物了。

非官方的,社区制作的JavaScript徽标。资料来源:https://github.com/voodootikigod/logo.js

非官方的,社区制作的JavaScript徽标。资料来源:https://github.com/voodootikigod/logo.js

  1. 众所周知,JavaScript 与 Java 无关。数十年来,这使非技术经理和招聘人员感到困惑。

但是对我来说,JavaScript 名称的最大问题是范围模糊。如果一个计算机程序被证明是用 JavaScript 所编写的,那么这并不能告诉我运行该程序所需的一切。因为我不知道:

  • 与程序兼容的 ECMAScript 的最低版本,或者至少是程序支持的 JavaScript 引擎或运行时环境。
  • 程序依赖于哪些本机 API(运行时环境添加的语言扩展)。该程序是要在“客户端”(在Web浏览器中)还是“服务器端”(在Node.js运行时环境中)运行,还是通用的?

使用第三方库时的困难证明了这种困惑。在 GitHub上 浏览可解决特定问题的开源 JavaScript 软件包时,对于每种解决方案,为了知道这个特定的 JavaScript 软件包是否与你自己的 JavaScript 应用兼容,都必须深入研究 README 或 package.json 文件。

(由于当前正处于模块系统之间的过渡期,这个问题变得更加严重:从社区的约定惯例(例如 CommonJS,AMD 和 UMD) 到 ECMAScript 的标准模块符号。

重新命名 JavaScript 可能有助于消除所有这些混乱。

新的 JavaScript

如果我们确实重命名了 JavaScript,将会如何称呼它?

JavaScript 已经有了很多名字。设计并实现该语言的第一版的 Brendan Eich 曾想把它称为 Mocha,但 Netscape 的市场营销专家将其命名为 LiveScript,当时它是在 Navigator 2.0 浏览器的早期 Beta 版中首次交付的,然后才确定其名称。1995 年底发布的 JavaScript。

该语言的替代实现称为 JScript(用于 Internet Explorer 浏览器的 Microsoft 版本)和 ActionScript(Adobe 的版本)。还有各种 JavaScript 方言,包括 CoffeeScript 和 TypeScript。

我认为 Eich 一直都是对的。 Mocha 是个好名字。在软件领域,这个名字仅与 Node.js 的 Mocha 测试框架和 Java 的旧版反编译器冲突。

但我个人更喜欢将 JavaScript 重命名为 JS

无论如何,很多人都用 JavaScript 的缩写来指代 JavaScript。它与官方文件扩展名匹配。而且我们可以将无处不在的黑底黄字的社区徽标转变为官方标志。

随着时间的流逝,JS 名称的来源将在很大程度上被遗忘,就像大多数 PHP 开发人员无法告诉你 PHP 究竟代表什么一样。

更好的办法是提出一个标准约定,用来为 JS 程序引用特定运行时环境所提供的扩展 API,以与主机系统进行通信。

例如,假如 ECMAScript 成为 JS,则万维网联盟支持的 JS 超集的正式名称可能是 WebJS,这是万维网联合会所指定的。

也许会有一个 ServerJS 标准,该标准指定了预期由服务器端 JavaScript 运行时(例如 Node.js )提供的其他API。

最后,ECMAScript 的年度发布周期和版本约定非常方便,应该将其扩展到新品牌的 JS 的所有版本。因此,WebJS 2020 将引用 ECMAScript 的快照以及截至 2020 年标准化的所有 Web API。

那么你怎么看? Reddit 上的评论