Google 推动的新提案引发争议!

60 阅读3分钟

翻译自:Tim Anderson \ 原文地址:devclass.com/2024/10/22/…

JavaScript 要被划分为两种语言?

图片

一位谷歌工程师向官方标准化委员会递交了一项提案,该提案欲将 JavaScript 划分为两种语言,其一为运行时引擎所实现的核心语言,其二为更为强大的变体,其依赖于能将其编译为核心语言的工具。

此提案于本月早些时候在 Ecma TC39 会议上提出,TC39([tc39.es])系 Ecma 国际组织中负责推进 JavaScript(正式名称为 ECMAScript)规范的委员会。

谷歌的软件工程师 Shu-yu Guo 专长于即时编译器(JITs)、虚拟机(VMs)、编译器以及标准化工作,此次演讲由其进行,幻灯片则由 Guo 与来自 Mozilla、苹果、Moddable 以及索尼的人员共同编写。Moddable 是一家提供用于嵌入式编程的开源软件开发工具包(SDK)的公司,其中包含 XS JavaScript 引擎。

作者们指出,新的语言特性对用户的影响大多呈负面。新特性“几乎总是”会使安全性恶化,性能“受到中性至负面的影响”,稳定性有时更差,并且唯有当开发人员运用新特性时,应用程序的特性才会得以改善。

他们表示,JavaScript 虚拟机(VMs)“因追求速度的压力已极度复杂”,这有损安全性,并且当新特性未被采用时“感觉尤为糟糕”。他们以 species 为例,JavaScript 的 MDN 网络参考已报告“引擎实现者正在研究是否剔除此特性”,还有用于大数值的 BigInt。关于 BigInt,演讲中指明“用例从未达成”。

依该提案来看,JavaScript 的基础技术应当简约,由于运行时的安全漏洞和“复杂性成本”会波及数十亿用户,而益处仅局限于切实利用这种复杂性的开发人员和应用程序。

尽管有多个组织参与,然而此项倡议在某种程度上貌似由谷歌推动,其中一张幻灯片包含一则免责声明,即“这个可能的解决方案系谷歌的首选方案,未必是其他实现者的”。

图片

依据一项新提案,JavaScript 开发人员主要运用编译器——但部分开发人员期望摆脱这种模式。

所提出的解决方案并非回溯现有特性,包括那些处于后期阶段的新特性提案,而是将未来的途径变更为大多数新特性于工具中实现而非在 JavaScript 引擎中实现。由引擎实现的语言称为“JS0”,而由工具实现的语言称为“JSSugar”;这些名称用于推动讨论,并非最终敲定的称呼。

工具化的构想对 JavaScript 尤为适宜,因为众多开发人员实际上借助 TypeScript 进行编码,并依赖于 BabelWebpack 或 TypeScript 编译器等编译器来输出 JavaScript。从开发人员的视角来看,JavaScript 是 JSSugar,但运行时引擎仅需实现 JS0。这意味着工具之间应当有更多的标准一致性。

倘若被采纳,该提案将意味着未来的语法特性将归入 JSSugar,而唯有 API 和功能特性将纳入 JS0。符合标准的引擎只需支持 JS0。负担将转移至工具实现者身上以支持 JSSugar,一个附带影响是工具实现者需要更多地参与标准制定流程,或许会形成一个新的技术小组。

该提案已然引发争议。“请勿赋予当前的 JavaScript 工具官方地位……包括我在内的众多 JavaScript 开发人员期望更少地依赖这些工具,”有人说道。

人们普遍认为优先考量安全性、性能和稳定性是一桩好事,但让 JavaScript 依赖中间工具的构想并不讨喜。另一位开发人员称:“安息吧,原生 JavaScript。”