开发者热议:微软新提议或将“彻底”改变 JavaScript 和 TypeScript!
技术编辑:MissD丨发自 思否编辑部
上个月,微软刚宣布支持了一项“关于进一步开发 JavaScript 和 TypeScript ”的提议,尽管这只是一个所谓的 0 阶段提案,但微软已宣布希望按时向 TC39(技术委员会39)提交该提案。有业内开发者表示,如果这项提议被采纳并将得到实施,那么对于 JavaScript 和 TypeScript 来说将迎来一场巨变。
相关阅读:
JavaScript 的 20 年奋进史
回顾过去的 20 年,如果比较一下现在和那时的 web 开发,我们就会发现,尽管JavaScript 作为一种编程语言已经发展了很多,但围绕 JavaScript 的生态系统却已取得了很大进步和发展。
究其原因,是由于:第一点,JavaScript 社区在过去 20 年里变得更加专业;第二点,互联网的一个基本问题变得越来越重要。以此同时,以上这两点是相互需要的。
众所周知,作为开发者,我们无法控制用户将使用哪些浏览器。也就是说,用户只有定期更新浏览器,才能使用 JavaScript 的最新功能。当然这也是对个人用户情况的总结,因为现在很多浏览器都会自动更新,或者在未经询问的情况下指示更新。
但对于公司而言,情况并非如此(或许由于企业对软件和软件更新有严格的规定)。许多公司经常会使用过时的软件,或使用过时的浏览器上网,这也会影响 HTML 和 CSS,此外编程语言也必须由各自的浏览器进行解释,因此具有很大的依赖性。
此时,作为一名 web 开发人员,我们将必须在两种观念之间做出选择:要么依赖于简化编程或在可用性方面带来更好结果的现代 JavaScript、CSS 或 HTML 功能,要么因过时的浏览器而无法为所有人提供这些现代功能(升级可能会导致一定数量的用户出现 bug)。
除此之外,几十年来还没有一个像样的 JavaScript 模块系统。而 Node.js 通过 CommonJS 获得了标准,但这仅限于服务器。
大约十年前,浏览器中很长一段时间没有发生任何事情,这就是为什么 Bundler 与 transpiler 一同出现的原因。尽管您使用的是一种可以正常执行的 JIT(即时)编译编程语言,但您始终需要处理一种复杂的构建过程,将源代码转换为实际代码,然后在浏览器中执行和解释(这是大约十年前的情况)。
TypeScript 的崛起
十年前,微软发明了 TypeScript。微软认为“如果你在部署之前需要一个 transpiler 来转换 JavaScript 代码,那么在这个构建过程中增加一个步骤也不会有什么大不了的”。
在这个过程中,开发者会得到一个能将现代 JavaScript 转换成普通 JavaScript 的 transpiler。此外,TypeScript 是一个静态类型系统,它使 JavaScript 更具可伸缩性,为团队高效开发 JavaScript 做出了重要贡献。
这也难怪 TypeScript 很快建立起来,并一举成为当今企业 JavaScript 开发的标准。
十年后的今天,世界发生了变化。虽然那些不更新的浏览器现在还“活着”,但它们今天所扮演的角色比过去小得多。
所以,对于 Evergreen 这样的浏览器而言,现在不使用 transpiler 也能工作,且有了 ESM(ECMAScript模块),还包括一个可在服务器端和客户端工作的基于 JavaScript 的本地模块系统。
这样一来,bundler 就用不着了,至少从技术角度来看是这样。bundler 只是优化 HTTP 请求的又一个步骤,这样就可以从服务器上加载更少的小文件,只需加载几个大文件。与此同时,构建过程也将逐渐变得更简单或更无关紧要。
目前,微软预计未来唯一剩下的必要工具,就是 TypeScript 编译器,因为 web 浏览器和其他 JavaScript 运行时环境根本无法理解 TypeScript。
也就是说,微软或 TypeScript 突然从一个非常实用的工具变成了一个相当“烦人”的东西。对此,微软表示他们不想成为阻碍,反之,他们想激励开发者。
当然,这样一来微软也会有所担心 —— JavaScript 开发迟早会像 20 年前一样快速、直接、高效,因为如果不使用 TypeScript 的话,Transpiler 这些东西迟早要被淘汰掉。
目前,打消顾虑的一种方式是:要求在 web 浏览器和其他运行时环境中集成 TypeScript,以此来作为 JavaScript 的替代编程语言。理论上,这并不牵强。
此外,TypeScript 现在也成为了一种更加复杂的编程语言,微软不希望将 TypeScript 编译器的所有功能直接集成到常见的 web 浏览器中。这将是一项非常复杂的任务,需要苹果、谷歌、Mozilla 等公司的合作,才能集成一个新的大标准。
当然,微软应该不想那样做,因此也就有了 3 月份的那份“关于进一步开发 JavaScript 和 TypeScript ”的新提议。
那么,TypeScript 是否应该保持完全独立,亦或者会变成“新的 JavaScript”呢?无论如何,我们或许会在接下来的几年里看到关于此次提议的发展。