写点什么

JavaScript 应该分成两种语言吗?谷歌新提案引发了意见分歧

  • 2024-11-12
    北京
  • 本文字数:1293 字

    阅读完需:约 4 分钟

大小:601.11K时长:03:25
JavaScript 应该分成两种语言吗?谷歌新提案引发了意见分歧

一名谷歌工程师向官方标准化委员会提交了一份提案,该提案将 JavaScript 分为两种语言,一种是由运行时引擎实现的核心语言,另一种则是更强大的变体语言,依赖将其编译为核心语言的工具。

 

这份提案是在本月初的 Emca TC39 会议上提出的,TC39 是 Ecma International 的一个委员会,负责制定 JavaScript(正式名称为 ECMAScript)规范。

 

谷歌的一名软件工程师 Shu-yu Guo 发表了演讲,他专攻 JIT、VM、编译器和标准化,幻灯片由 Guo 与 Mozilla、苹果、Moddable 和索尼的合作者共同撰写。Moddable 是一家提供嵌入式编程开源 SDK 的公司,其中包括 XS JavaScript 引擎。

 

作者认为,新的语言特性对用户的影响大多是负面的。新特性“几乎总是”会降低安全性,使性能受到“中性到负面影响”,稳定性有时会更差,并且只有开发人员使用新特性时,应用程序功能才会得到改进。

 

他们说,JavaScript VM(虚拟机)“由于速度压力已经变得非常复杂”,这会损害安全性,并且当新特性未被采用时“感觉特别糟糕”。他们引用了一些例子,一个例子是 JavaScript 的 MDN web 参考,已经报告“引擎实现者正在调查是否删除此特性”,以及用于大数值的 BigInt。关于 BigInt,演示指出“用例从未得到实现”。

 

根据该提案,JavaScript 的基础技术应该很简单,因为安全漏洞和运行时的“复杂性成本”影响了数十亿次用例,而好处只有能真正利用这种复杂性的开发人员和应用程序才能享受到。

 

尽管涉及多个组织,但该计划似乎在某种程度上是由谷歌推动的,其中一张幻灯片包含免责声明:“这一可能的解决方案是谷歌的首选解决方案,不一定是其他实施者的首选解决方案”

JavaScript 开发人员主要根据新提案使用编译器,但一些开发人员希望摆脱这种模式

 

提议的解决方案不是回溯现有特性,或者撤回那些处于后期提案阶段的新特性,而是将未来的方法改为大多数新特性在工具中,而不是在 JavaScript 引擎中实现。引擎实现的语言称为“JS0”,而工具实现的语言称为“JSSugar”;这些名称是用于讨论起的,并非最终名称。

 

工具理念特别适用于 JavaScript,因为许多开发人员实际上是在使用 TypeScript 编写代码,并依赖 Babel、Webpack 或 TypeScript 编译器等编译器来输出 JavaScript。从开发人员的角度来看,JavaScript 是 JSSugar,但运行时引擎只需实现 JS0。这意味着各种工具应该更加符合一致的标准。

 

如果该提案被采纳,则意味着未来的语法特性将进入 JSSugar,而只有 API 和功能特性将进入 JS0。兼容引擎只需支持 JS0。支持 JSSugar 的负担将转移到工具实现者身上,而副作用是工具实现者需要更多地参与标准流程,并可能组建一个新的技术小组。

 

该提案已经引起争议。“请不要给当前一批 JavaScript 工具授予官方地位……许多 JavaScript 开发人员,包括我自己,都希望减少对这些工具的依赖,”其中一位开发人员说道。

 

人们普遍认为,优先考虑安全性、性能和稳定性是一件好事,但让 JavaScript 依赖中间工具的想法并不受欢迎。“RIP Vanilla JS”另一位开发人员说道。

 

原文链接:https://devclass.com/2024/10/22/should-javascript-be-split-into-two-languages-new-google-driven-proposal-divides-opinion/

2024-11-12 18:087271

评论 1 条评论

发布
用户头像
我赞成,其实现在的前端开发不就是这样么?现在还有哪些稍微大些的下难过吗项目没有编译打包之后发布的?
2024-11-19 08:30 · 浙江
回复
没有更多了
发现更多内容

挑选文档协作工具的技巧

Baklib

Mysql开发实践:加载共享库时出错:libaio解决方案

华为云开发者联盟

数据库 后端 企业号十月 PK 榜

读书笔记|妙趣横生的图灵奖获得者漫画

宇宙之一粟

读书笔记 漫画 10月月更 图灵

转:浏览器的同源策略

小江

JavaScript 同源策略

Java8已经发布7年了,不会还有人没用过CompletableFuture吧

一灯架构

Java java面试 10月月更

实践GoF的设计模式:访问者模式

华为云开发者联盟

开发 华为云 企业号十月 PK 榜

openGauss企业级开源数据库获第十届中国电子信息博览会金奖

易宝正式加入openGauss社区

图尔兹正式加入openGauss社区

东方大唐正式加入openGauss社区

共筑计算新生态共赢数字新时代,云和恩墨大讲堂 x openGauss Meetup x 鲲鹏生态孵化营(成都站)圆满落幕

人保科技正式加入openGauss社区

非常好用统计接口耗时小工具,Java程序员强烈推荐

一灯架构

Java Java 面试 10月月更

初学开发必看:何为Git,何为SVN

华为云开发者联盟

开发 华为云 企业号十月 PK 榜

Plan Stitch:一种使用缝合物理计划解决查询计划性能退化问题的方法

KaiwuDB

数据库 缝合物理计划 计划回退

带你了解5个幽灵攻击与编译器中的消减方法

华为云开发者联盟

后端 开发 编译器 企业号十月 PK 榜

中科星图正式加入openGauss社区

Java面试官:你能写个LRU缓存吗?

一灯架构

Java java面试 10月月更

企业知识分享|如何设计产品手册/产品说明书?

Baklib

传统大型国企云原生转型,如何解决弹性、运维和团队协同等问题

阿里巴巴云原生

阿里云 Serverless 云原生

太神了!阿里p7大佬总结的Java面试心得,起始—进阶—突击,一应俱全!

Geek_0c76c3

Java 数据库 开源 程序员 架构

神州数码正式加入openGauss社区

实现企业内部知识流通?搭建企业内部Wiki

Baklib

openGauss 社区 2022 年 8 月运作报告

Flowable 流程实例的挂起(暂停)与激活

江南一点雨

Java springboot workflow flowable

Spark数据倾斜解决

五分钟学大数据

大数据 spark 10月月更

CUDA入门教程;Transformer太火不是好事?;探求GPU极限性能的利器|AI系统前沿动态

OneFlow

人工智能 前沿动态

zookeeper-watcher、事务、分布式锁的API使用

zarmnosaj

10月月更

玩转分布式架构下的可观测性

博睿数据

可观测性 Skywalking Bonree Server 博睿数据数据链DNA 智能运维AIOps

对比传统数据仓库,实时数仓的四大优势

雨果

数据仓库 实时数仓

Github访问量过百万!阿里内部至尊级分布式事务手册,实至名归!

Geek_0c76c3

Java 数据库 开源 程序员 开发

JavaScript 应该分成两种语言吗?谷歌新提案引发了意见分歧_编程语言_Tim Anderson_InfoQ精选文章