翻译自: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
进行编码,并依赖于 Babel
、Webpack
或 TypeScript
编译器等编译器来输出 JavaScript
。从开发人员的视角来看,JavaScript
是 JSSugar
,但运行时引擎仅需实现 JS0
。这意味着工具之间应当有更多的标准一致性。
倘若被采纳,该提案将意味着未来的语法特性将归入 JSSugar
,而唯有 API
和功能特性将纳入 JS0
。符合标准的引擎只需支持 JS0
。负担将转移至工具实现者身上以支持 JSSugar
,一个附带影响是工具实现者需要更多地参与标准制定流程,或许会形成一个新的技术小组。
该提案已然引发争议。“请勿赋予当前的 JavaScript
工具官方地位……包括我在内的众多 JavaScript
开发人员期望更少地依赖这些工具,”有人说道。
人们普遍认为优先考量安全性、性能和稳定性是一桩好事,但让 JavaScript
依赖中间工具的构想并不讨喜。另一位开发人员称:“安息吧,原生 JavaScript
。”