JavaScript 已进入第三个时代,未来将何去何从?

原文:https://www.swyx.io/writing/js-third-age/
翻译:大道至简

JavaScript 每十年会有一次大换血。我认为,一个加速变革的时期刚刚开启,在未来可能会被认为是 JavaScript 的第三个时代

JavaScript 已进入第三个时代,未来将何去何从?
Third age

历史回顾

JS 的第一个时代,1997-2007 年,开局很热闹,结局让人唏嘘。大家都知道 Brendan Eich 的故事,但也许很少有人知道 ES4 是如何在 Flash/Actionscript 等封闭生态系统的激烈竞争中步履维艰的。JS 的完整起源故事被其主要作者 Brendan Eich 和 Allen Wirfs-Brock 在 JavaScript: The First 20 Years ¹一文中讲述得更好。

JavaScript 已进入第三个时代,未来将何去何从?
ECMAScript 历史时间线

JS 的第二个时代,2009-2019年,开始于神奇的 2009 年。这一年,npm,Node.js 和 ES5 诞生了。随着 Doug Crockford 发表的JavaScript 语言精粹,开发者创造了一大堆 JS 构建工具和库,并将 JS 的领域扩展到桌面端和新型智能手机。到 2019 年,我们甚至看到了像Facebook 的 Hermes这样的手机端专用 JS 运行时和 Svelte 3 这样的编译器优先的前端框架。

第三个时代

2020 年感觉像是一个新时代的开始。如果说第一个时代是关于语言的构建,而第二个时代是关于用户对语言的探索和扩展,那么第三个时代则是关于清除遗留假设和缩减工具层。

注:我之前发布过 Collapsing Layers ²论文。

被清除的主要遗留假设是 JS 生态系统对 CommonJS 的依赖,这是一系列妥协的结果。它的替代品—— ES 模块,已经蓄势待发了,但是由于现有的工具体系虽然速度慢但还够用,它缺乏真正飞跃的动力。在前端,现代浏览器也提供了部分支持,但是一些重要的细节问题还没有解决。Pika/Snowpack 项目的定位正是通过提供一个可以随着 ES 模块的完成而消失的外观模式来加快这个进程。作为最后的奖励,IE11 将从今年开始它缓慢的退出之路,直到 2029 年终结。

另一个要抛弃的假设是 JavaScript 工具必须用 JavaScript 构建。热路径(hot path,编译器中的概念,花费时间最多的代码执行路径)中的类型安全和10倍-100倍性能提升的潜力太大了,不容忽视。随着 TypeScript 几乎完全可替换 JavaScript,“JS 自给自足”的理想已经消失。现在的 Deno 和 Relay 也证明,人们会学着用 Rust 来贡献核心 JS 工具。Brandon Dail 预言这个转换将在 2023 年完成。我们会继续用 JavaScript 和 TypeScript 编写大多数强调可用性胜过性能的工具。我们曾经思考的“函数式内核,命令式外壳”³,现在将转向“系统内核,脚本外壳”。

注:尚存争议,Python 的 PyPy 也表明这还不是定论。

工具层缩减的方式也挺有意思。Deno 采用了一种激进的方法来编写一个全新的运行时,它用 TypeScript 将常见的用于测试、格式化、linting 和打包等任务的一系列工具合并成一个二进制文件,甚至还包括一个标准库。Rome 采取了不同的策略,将所有工具层都折叠于 Node.js 之上(据我所知,我也不太熟悉)。

有一些 10 年前不存在的一些东西,现在已经成为了生活的一部分,那就是公有云(AWS、Azure、GCP等)。JavaScript 和云之间有一种有趣的关系,我也说不太清楚——云平台开发者是不会碰 JS 的,但 JS 却是他们最大的客户。AWS Lambda 首先用 JS 发布。还有一个明显的变化是,IDE 和云之间的分层将被折叠简化,处于中间的麻烦的开发机器变得无关紧要了。Glitch、Repl.it、Codesandbox、GitHub Codespaces、Stackblitz 以及更多工具都是云发行版,都在利用 JS 探索这个领域。

即使在前端框架中,进展情况也是极好的。Svelte 把从动画到状态管理的所有内容都压缩进编译器环节。React 正在探索 metaframeworks 和客户端-服务器集成。Vue 正在致力于一个名为 Vite 的 dev server 项目。综上所述:第三个时代的 JS 工具将会:

  • 更快
  • ESM 优先
  • 缩减分层(一个工具做好许多事情,而不是许多工具做好一件事情)
  • 更加类型安全(核心采用强类型语言构建,用户代码以零配置方式支持 TS)
  • 更安全(避免依赖攻击或者过于宽松的权限)
  • 多语言
  • 新型同构(认识到很多 JS 在到达客户端之前应该先在构建时或服务端运行)

所有这些工作的结果是更好的开发者体验(更快的构建,行业标准工具)和用户体验(更小的资源包,更快的功能交付)。从网站脚本玩具语言,到完整的应用程序平台,JavaScript 最终完成了转变。

JavaScript 的末日?

如果加里·伯恩哈特的预测⁴是正确的,第三个时代可能是 JavaScript 的最后一个时代(他给出的时间线是截止到 2035 年)。Web Assembly 总像一个若隐若现的幽灵——即使是 Brendan Eich,也将他的名言改成了“始终押注于 JS,以及 WASM”。他最初认为 JS 可能是“通用虚拟机”,但他曾告诉我现在 WASM 才是这个想法的最终实现。

若真如此,我们目前正处于终局之战(Endgame)。引用链接:

  1. https://www.swyx.io/writing/js-20-years/
  2. https://www.swyx.io/writing/collapsing-layers/
  3. https://www.destroyallsoftware.com/screencasts/catalog/functional-core-impershell
  4. https://www.destroyallsoftware.com/talks/the-birth-and-death-of-javascript
JavaScript 已进入第三个时代,未来将何去何从?

原文出处:微信公众号【大道至简1024 1024译站】

原文链接:https://mp.weixin.qq.com/s/AVkbPPuI64dKmV2djKbHyg

本文观点不代表Dotnet9立场,转载请联系原作者。

发表评论

登录后才能评论