#24 ShopTalk:与 TC39 主席聊聊谁在决定 JavaScript 的未来

#24 ShopTalk:与 TC39 主席聊聊谁在决定 JavaScript 的未来

71分钟 ·
播放数18
·
评论数0

节目信息

ShopTalk | 2025年2月27日

原文播客:ShopTalk
原文链接:shoptalkshow.com


节目简介

本期节目邀请 TC39 主席 Ujjwal Sharma 深入探讨 JavaScript 语言标准的制定过程。从 TC39 是什么、谁在其中、如何工作,到备受关注的 Temporal API、Signals 信号机制和类型注释提案,带你了解决定 JavaScript 未来的幕后故事。


本期要闻

1. TC39:JavaScript 的守护者

TC39 是 Ecma 国际的第 39 技术委员会,负责设计和演进 JavaScript(正式名称 ECMAScript)的新功能和新特性。这是一个通过共识来运作的委员会,在极少数情况下可能会对平台做出破坏性更改。

嘉宾 Ujjwal Sharma 是 TC39 的三位主席之一,来自 Igalia 公司。他强调主席的角色并非拥有广泛的行政权力,而是承担责任——确保工作有成效、反映用户诉求、在有争议的话题上达成共识。

“我们实际上没有真正的权力,只有责任。” —— Ujjwal Sharma

TC39 的主要成员是”实现者”——正在开发浏览器或其他 JavaScript 引擎的人员。无论是运行在浏览器还是冰箱里的 JavaScript 引擎,任何编写实现该语言代码的人都可以参与其中。

2. Temporal API:JavaScript 最大的语言新增

Temporal 是 TC39 对 JavaScript 日期处理的彻底重新设计,也是语言层面所做出的最重大变更。目前 JavaScript 的 Date 对象存在严重缺陷——它是对 Java 旧版 Date 对象的复制,当 JavaScript 面向公众时,Java 已经重新设计了他们的日期对象。

Temporal 的核心改进包括:

  • 统一的日期时间格式,保证解析一致性
  • 支持非格里高利历(如希伯来历),并能正确处理闰日和闰年规则
  • 新的时间戳格式包含时区和日历信息,具备跨语言互操作性
  • 提供明确的方法如”加一个月”,自动处理各种边界情况

“这是我们在语言层面所做出的最重大变更,比国际化命名空间对象的全部内容还要大。” —— Ujjwal Sharma

Temporal 的设计深受 Moment.js 维护者的影响,他们将多年积累的专业知识带回了语言设计中。目前 Temporal 已经可以在生产环境使用,主流浏览器都已实现。

3. Signals 信号机制:前端状态管理的未来

Signals 是目前前端框架广泛采用的状态管理模式,TC39 正在探索将其标准化到 JavaScript 语言中。虽然从引擎角度看实现成本不高,但框架作者们对具体实现方式存在分歧。

“Signals 是其中一个让我感觉浏览器方面回应说’哦,对,我们可以做到’的功能。” —— Chris Coyier

目前该提案仍处于早期阶段,关键问题在于:

  • 框架作者对当前版本并不完全满意
  • 需要明确 Signals 最终应该是什么样子
  • 是否只在迎合某一类用户,以及这个功能对他们有多重要

Ujjwal 表示,TC39 内部的倡导者需要重新将该提案公开,向框架作者们展开讨论,因为如果无法明确该功能对语言的意义,将其加入语言毫无意义。

4. 类型注释提案:让 TypeScript 在浏览器中运行

类型注释提案旨在为 JavaScript 添加语法空间,允许在特定位置放置类型信息——引擎会忽略这些内容,但 TypeScript 可以正常工作。

核心理念是:

  • 在语言中预留 TypeScript 放置类型的语法空间
  • 将冒号与花括号之间的空白区域转换为注释
  • 引擎直接忽略类型信息,无需编译即可运行

“你可以将大量 TypeScript 代码复制粘贴到控制台中直接运行,无需进行编译。” —— Ujjwal Sharma

这个提案面临的主要挑战:

  • TypeScript 语法非常复杂,如何安全地移除
  • 对 TypeScript 用户而言有多实用,对不使用 TypeScript 的人又有多实用
  • TypeScript 可以随意演进,但一旦标准化就会受到限制

5. TC39 的决策哲学:预算与妥协

TC39 有一个核心概念——”预算”。每添加一个新功能都会增加语言复杂度,带来解析开销和潜在的性能影响。随着预算的消耗,委员会变得越来越保守。

“最大的风险是错误地判断某人对某事的兴趣程度,或误判某事的实际价值。” —— Ujjwal Sharma

这导致一个有趣的现象:功能需要设计得让所有人满意才能通过。任何人的反对都可能损害提案,迫使提案者必须非常注重外交技巧。


金句摘录

“我们实际上没有真正的权力,只有责任。” —— Ujjwal Sharma

“最大的风险是错误地判断某人对某事的兴趣程度,或误判某事的实际价值。” —— Ujjwal Sharma

“双方的观点都是正确的——引擎开发者正确,因为添加功能确实存在成本;用户正确,因为语言需要不断演进。” —— Ujjwal Sharma

“网页在构建平台方面取得了巨大成功,它不仅是一个优秀的开发平台,还尊重内容创作者。” —— Ujjwal Sharma


🤔 思考与启发

本期节目展现了 JavaScript 语言标准制定的深度思考:

  1. 复杂性与实用性的平衡: 每个新功能都会增加语言复杂度,TC39 必须在开发者需求和语言健康之间找到平衡点。BigInt 是一个例子——它给语言带来了大量复杂性,但有人认为值得这么做。
  2. 共识驱动的保守策略: TC39 的流程设计使得任何反对都可能阻止提案,这看似低效,但确保了网络平台的稳定性。几十年前的网站至今仍能正常运行,正是因为这种保守态度。
  3. 开发者与实现者的视角差异: 网页开发者关心的是”我能做什么”,引擎开发者关心的是”这会多慢”。TC39 的工作就是在这些不同视角之间找到平衡。

延伸思考: 如果你是 TC39 成员,面对 Signals 这样的提案——技术上可行、开发者有需求,但框架作者不满意——你会如何推动它前进?


关于主播

主播辛宝 Otto 目前在做《Web Worker – 前端程序员都爱听》播客,欢迎移步访问收听。