2014 年 PyCon 大会上,Gary Bernhardt 发表了一场名为《The Birth and Death of JavaScript》的演讲。这场以 2035 年为时间背景的 "科幻" 演讲,预言 JavaScript 将因设计缺陷和历史包袱走向 "死亡",被一种名为 "Asm" 的通用编译目标取代,浏览器将成为新的操作系统内核。十一年后的今天,当我们审视这一预言时,会发现技术演进的轨迹既有命中之处,也有显著的偏离。
编译目标的迁移逻辑
Bernhardt 的预言建立在一条清晰的技术演进链上:JavaScript 作为 1995 年仓促诞生的语言,其设计缺陷(类型强制转换、== 运算符的诡异行为等)使其难以承担日益复杂的 Web 应用需求。Mozilla 于 2012 年提出的 asm.js 为此提供了过渡方案 —— 通过定义 JavaScript 的一个严格子集,允许 C/C++ 代码以接近原生的性能运行在浏览器中。asm.js 的成功验证了浏览器执行非 JavaScript 代码的可行性,也为 2015 年 WebAssembly(WASM)的诞生铺平了道路。
从技术架构看,这一演进符合编译器领域 "抽象层上移" 的长期趋势。WASM 作为二进制指令格式,提供了比 JavaScript 更紧凑的代码体积、更可预测的性能特征,以及真正的多语言支持。Rust、C/C++、Go、Kotlin 等语言均可编译至 WASM,使 "编写一次,处处运行" 的愿景在 Web 平台得以部分实现。Figma 的渲染引擎、Cloudflare Workers 的边缘计算运行时,都是这一技术路线的成功实践。
JavaScript 为何未死
然而,Bernhardt 预言中 2035 年 JavaScript 的 "死亡" 并未如期发生。相反,JavaScript 生态系统在过去十年间经历了前所未有的扩张。TypeScript 的兴起为语言添加了静态类型系统,解决了大部分 "WAT" 时刻;ES6 及后续版本的标准化进程大幅改善了语言语义;Node.js 将 JavaScript 推向服务端,形成了全栈开发的统一技术栈。
JavaScript 的存续源于其独特的生态位优势。首先,DOM API 与 JavaScript 的深度绑定形成了路径依赖 —— 尽管 WASM 可以操作 DOM,但通过 JavaScript 代理层调用 DOM API 仍是最自然的开发模式。其次,JavaScript 的即时编译(JIT)性能在过去十年间取得了质的飞跃,V8 引擎的优化使其在多数场景下已能满足性能需求。最重要的是,JavaScript 拥有 Web 平台最庞大的开发者社区和工具链生态,这种网络效应构成了难以逾越的迁移成本。
WASM 的现实定位
WASM 并未如预言般成为 JavaScript 的 "杀手",而是找到了与 JavaScript 共生的生态位。当前 WASM 的主要应用场景包括:性能密集型计算(图像处理、音视频编解码、游戏引擎)、多语言复用(将现有 C++/Rust 代码库移植至 Web)、以及沙箱化执行环境(边缘计算、插件系统)。
WASM 的局限同样明显。截至 2025 年,WASM 仍缺乏成熟的垃圾回收(GC)支持,托管语言(如 Java、C#)的完整支持仍在标准化进程中。WASM 与 JavaScript 之间的边界调用存在序列化开销,频繁的跨边界通信会抵消性能优势。此外,WASM 的调试工具链、包管理系统、安全模型仍在快速演进中,尚未达到生产环境的 "无摩擦" 体验。
工程实践建议
对于当代开发者,Bernhardt 的预言提供了有价值的架构视角,但需结合现实进行取舍:
何时选择编译至 WASM:当项目涉及大量数值计算、需要复用现有 C++/Rust 代码库、或对代码体积有严格限制时,WASM 是合理选择。Rust + wasm-pack 或 AssemblyScript 是当前较成熟的工具链。
何时坚守 JavaScript/TypeScript:当应用以 DOM 操作为主、依赖丰富的 npm 生态、或团队以 JavaScript 为母语时,原生 JavaScript 仍是最高效的路径。TypeScript 的类型安全已能解决大部分维护性问题。
混合架构策略:将性能瓶颈模块提取为 WASM,通过 JavaScript 胶水代码集成,是当前最务实的架构模式。Emscripten 和 wasm-bindgen 等工具可自动化这一过程。
结语
Gary Bernhardt 的预言揭示了技术演进的深层逻辑:编程语言的兴衰不仅取决于技术优劣,更受制于生态惯性、迁移成本和平台权力结构。JavaScript 的 "不死" 并非因为完美,而是因为它已成为 Web 平台的 "系统语言";WASM 的崛起也不是为了取代,而是为了扩展平台的语言多样性。对于开发者而言,理解这一格局,在恰当的场景选择恰当的工具,比押注单一技术路线更为明智。
参考来源
- Herding Code 189: Gary Bernhardt on The Birth and Death of JavaScript (播客访谈)
- Destroy All Software: The Birth & Death of JavaScript (演讲页面)
内容声明:本文无广告投放、无付费植入。
如有事实性问题,欢迎发送勘误至 i@hotdrydog.com。