别等了,JavaScript 迟早要完——2014 年那场预言至今仍在应验

别等了,JavaScript 迟早要完——2014 年那场预言至今仍在应验 2014 年就有人公开宣判 JavaScript 死刑不是因为它不够好而是因为 Web 平台终将进化到不再需要它。十年过去这场演讲的每一个论点都在被验证。这是什么2014 年软件工程师 Gary Bernhardt 在 PyCon 上发表了一场名为“The Birth and Death of JavaScript”的经典技术演讲。这场演讲后来被整理成文字稿在 Hacker News 上引发持续讨论至今仍被反复引用。演讲的核心论点非常直接JavaScript 是一个诞生于 10 天之内的“意外产物”它的设计缺陷是结构性的无法通过打补丁修复。随着 Web 平台性能提升、浏览器能力增强以及更优系统语言如 Rust、Go、Wasm 目标语言的成熟JavaScript 最终会被“编译目标”和“原生 Web 语言”双重夹击而消亡。这不是一篇技术预言小说而是一份基于 Web 技术演进逻辑的推演。演讲者不是要黑 JS而是想提醒所有人别把职业生涯押在一个注定被替代的中间层上。为什么重磅在 2014 年JavaScript 正处于如日中天的阶段Node.js 刚火React 还没发布ES6 还在草案阶段。敢在这个时间点说“JS 会死”无异于在 2015 年说“比特币会崩”。但 Bernhardt 的逻辑不是情绪宣泄而是基于一个核心对比维度JavaScript 时代未来演讲预测运行方式解释执行JIT 优化编译到 Wasm / 原生字节码类型系统动态弱类型隐式转换灾难静态强类型编译期检查工具链需要 Babel、Webpack 等转译直接编译到 Web 目标性能受限于 JS 引擎优化上限接近原生性能生态依赖必须学 JS 才能写 Web任何语言都能编译到 Web这个对比在今天看来已经部分成真WebAssembly 于 2017 年正式发布Rust 和 Go 都可以编译到 Wasm 运行在浏览器中。TypeScript 虽然没杀死 JS但本质上是对 JS 的“投降式改良”——承认原生 JS 不够用。技术亮点1. “10 天设计”的诅咒Brendan Eich 在 1995 年用 10 天创造了 JavaScript 的第一个版本。这不是黑历史是事实。Bernhardt 指出这个时间窗口决定了 JS 的底层缺陷没有模块系统直到 ES6 才原生支持import/export之前全靠社区方案全局作用域污染var声明的变量默认挂到window上隐式类型转换[] []等于空字符串[] {}等于[object Object]这些不是“特性”是设计妥协。后续所有“最佳实践”本质上都是在绕开这些坑。// 经典面试题猜猜输出什么console.log(0.10.20.3);// falseconsole.log(typeofNaN);// numberconsole.log([]![]);// true2. “JavaScript 是汇编语言”的悖论演讲中最反直觉的观点是JavaScript 实际上已经变成了 Web 的“汇编语言”。开发者不再直接写汇编而是写 C/Rust/TypeScript 然后编译成汇编。同理未来开发者也不会直接写 JS而是写更高级的语言然后编译成 JS 或 Wasm。这个类比在今天已经成立TypeScript 编译到 JavaScriptRust 编译到 WasmDart 编译到 JavaScript。JS 正在从“开发语言”退化为“编译目标”。3. 性能墙与 Wasm 的降维打击Bernhardt 预测当 Web 应用需要接近原生性能时如游戏、视频编辑、3D 渲染JS 的 JIT 优化天花板会成为瓶颈。而 Wasm 的出现直接绕过了这个限制Wasm 是二进制格式解析速度比 JS 快一个数量级Wasm 的指令集接近硬件编译器可以做更激进的优化Wasm 的内存模型是线性的没有 GC 暂停问题// Rust 编译到 Wasm 的示例#[wasm_bindgen]pubfnfibonacci(n:u32)-u32{matchn{00,11,_fibonacci(n-1)fibonacci(n-2),}}这段 Rust 代码编译成 Wasm 后在浏览器中的执行速度比等效 JS 快 2-5 倍且没有 GC 抖动。4. 工具链的“自噬”现象演讲还预言了一个讽刺现象JS 的工具链会越来越复杂最终反噬 JS 本身。为了弥补 JS 的缺陷社区发明了 Babel、Webpack、ESLint、Prettier、Jest……这些工具本身是用 JS 写的但它们的复杂度已经超过了大多数业务代码。“你花在配置 Webpack 上的时间比写业务逻辑的时间还多”——这句话在 2018 年之前是段子之后是现实。5. 消亡不是“消失”而是“降级”Bernhardt 特别强调JS 的消亡不是像恐龙一样突然灭绝而是像 COBOL 一样慢慢退居二线。JS 不会消失但会从“Web 唯一语言”降级为“Web 兼容层语言”。今天看这个判断非常精准新项目首选 TypeScript 而非原生 JS性能敏感模块用 Rust/Wasm 替代框架层React/Vue正在抽象掉 JS 的 DOM 操作细节边缘计算Cloudflare Workers支持多种语言编译到 JS对 AI 工程师的启示1. 别把技术栈当信仰要当工具AI 领域的技术更迭比 Web 更快。2018 年的 TensorFlow 1.x 和 2023 年的 PyTorch 2.0 几乎是两个世界。如果你把职业生涯押在某个框架或语言上5 年后可能面临“技能贬值”。可执行建议每季度花 1 天时间调研一个你当前技术栈的“替代方案”。不是要你立刻切换而是保持对生态变化的敏感度。比如现在用 PyTorch可以看看 JAX 或 MLX 在做什么。2. 关注“编译目标”而非“开发语言”AI 工程师经常纠结“用 Python 还是 C 写模型推理”。但更本质的问题是你的模型最终运行在什么平台上如果目标是浏览器考虑 ONNX Runtime Web 或 TensorFlow.js如果目标是移动端考虑 Core ML 或 TFLite如果目标是边缘设备考虑 Wasm 或 C 编译可执行建议在选型时先确定“最终运行环境”再反推“用什么语言开发”。不要因为“Python 好写”就强行把模型部署到浏览器。3. 警惕“工具链膨胀”陷阱AI 项目的工具链膨胀速度不亚于 Web 项目Docker、Kubernetes、MLflow、Weights Biases、DVC、Ray……每个工具解决一个问题但组合起来就是运维噩梦。可执行建议每引入一个新工具问自己三个问题这个工具解决的核心问题是什么不用它有没有更简单的替代方案如果它 2 年后停止维护我的迁移成本是多少参考链接原文演讲文字稿https://www.destroyallsoftware.com/talks/the-birth-and-death-of-javascriptHacker News 讨论https://news.ycombinator.com/item?id7691071WebAssembly 官方文档https://webassembly.org/一深思AI · AI 情报站 · 2026-06-15