写点什么

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:087192

评论 1 条评论

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

☕【Java技术指南】「并发编程专题」CompletionService框架基本使用和原理探究(基础篇)

码界西柚

Java CompletionService Executor 9月日更

【VueRouter 源码学习】第十篇 - 全局钩子函数的实现

Brave

源码 vue-router 9月日更

Mybatis Plus 的 @SqlParser 的说明与替代注解

玄兴梦影

注解 过滤器 Mybatis-Plus

深入理解Java虚拟机-虚拟机执行子系统,字节跳动超高难度三面java程序员面经

Java 程序员 后端

性能测试中集合点和多阶段问题初探

FunTester

性能测试 接口测试 测试框架 测试开发 FunTester

架构实战营 模块八作业

孫影

架构实战营 #架构实战营

计算机操作系统学习笔记 | 操作系统特征

Regan Yue

学习 操作系统 9月日更

网络攻防学习笔记 Day134

穿过生命散发芬芳

网络安全 9月日更

外包学生管理系统架构设计

陈家豪

架构实战营

OpenSL ES

Changing Lin

9月日更

三分钟带你入门-redis-高可用架构之哨兵,大厂Java高级面试题汇总解答

Java 程序员 后端

深入理解 Java 多线程核心知识:跳槽面试必备,Java算法基础面试题

Java 程序员 后端

深入了解QueryDSL

邱学喆

type Configuration Expression SqlSerializer visitor

深入理解JAVA虚拟机原理之垃圾回收器机制(一),Java开发6年了

Java 程序员 后端

不同 GC 和 堆内存总结

大海

JVM 垃圾回收机制 垃圾回收算法 垃圾回收器

区块链,不是元宇宙的全部

CECBC

Typora+PicGo+Gitee搭建博客写作环境

Simon郎

Typora PicGo markdown编辑器 免费图床

架构实战营 - 模块八作业

李东旭

「架构实战营」

写给互联网工程师的5G书 | 0. 前言

俞凡

架构 5G

写给互联网工程师的5G书 | 1. 简介

俞凡

架构 5G

字符串池化,减少了三分之一的内存占用

newbe36524

C# string 内存

Kubernetes环境Traefik部署与应用

Galen Suen

Kubernetes Helm Traefik

Scrum Patterns:冲刺目标(译)

Bruce Talk

敏捷 译文 Agile Scrum Patterns

攀岩时代:HMS Core 6.0与移动开发之路

脑极体

架构实战营 - 模块三作业

en

架构实战营

老师偷偷塞给我一份资料,封面写着《操作系统》,下面一行小字

梦想橡皮擦

9月日更

浏览器缓存之强缓存和协商缓存

Augus

浏览器 9月日更

深入理解Java中的不可变对象(1),面试加分项

Java 程序员 后端

谷歌工程师是怎么写工程设计文档的?

俞凡

Google 大厂实践

深入理解Java中的不可变对象,这可能是目前最全的

Java 程序员 后端

区块链不是用来解决现实社会问题 而是为了建立一个全新的平行世界而生

CECBC

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