想听世界上最懂 JavaScript 的人和你讲 JavaScript 吗?
一门科学的历史,就是这门科学本身。
——歌德
时至今日,JavaScript 对前端工程师的重要性已无需多言。甚至有些同学已经达到了通读语言标准,对 ECMA-262 规范熟捻于心的水平。
然而即便如此,很多同学仍然将编程语言作为一种源自权威的、教条式的、纯应用层面的工具来看待,对背后所能延伸出的广阔领域不求甚解,更不认为自己有条件参与到这项技术的演化之中。这其实是颇有些遗憾的。
那么,怎样才能做到对语言规范祛魅,用发展的眼光来看待 JavaScript 呢?
显然,此时单纯地知道某项语言特性「是什么」是不够的,我们更要理解这背后许多的「为什么」。
这需要知道的除了编程语言的基础知识外,更有一项不可或缺的部分,亦即 JavaScript 的演化历史——规范为什么要这么定义?TC39 为什么要这样决策?
要解答这些问题,我们必须回到当时的历史背景下,方能理清来龙去脉,看透个中取舍。
要讲述这样的历史,无疑需要真正深度参与过 JavaScript 演化的前辈。
幸运的是,这样的人一来就来了两个。
他们一位是 JavaScript 的发明者,前端祖师爷 Brendan Eich;另一位是 ES5 和 ES6 标准的主编兼首席作者,堪称 JavaScript 甘道夫的 Allen Wirfs-Brock——论起对 JavaScript 的贡献和对历史标准的理解,他们认第二,恐怕就没人敢认第一了。
可是,这两位早已在前端江湖归隐的老神仙,为什么会突然相聚一堂,联名回忆起 JavaScript 的峥嵘岁月呢?
这里的渊源同样极有来头,乃是原定于 2020 年举行的 History of Programming Languages(HOPL)学术会议。
这项会议是编程语言界「华山论剑」级的顶会,每隔十年以上才举行一次,只有极少数重要编程语言的核心贡献者有资格主笔。像 C、C++、Lisp、Smalltalk、Haskell 等如雷贯耳语言的作者,都曾是会议的座上宾。
所以,两位大佬这次讲的故事,就是他们为此次会议所提供的 JavaScript 历史研究成果——尽在名为《JavaScript 二十年》(JavaScript the First 20 Years)的新书之中。
以两位作者的履历和 HOPL 会议的背景,相信我们已经无需担心本书的权威性了。
但提到学术著作,我们往往会下意识地将其与晦涩难懂联系起来。所幸 HOPL 毕竟不同于狭义的编程语言学术研究,它鼓励作者除了技术细节之外,一并尽可能多地写进那些影响语言演化的非技术部分(俗称八卦)。
在这种驱动力之下,本书的题材与传统的《JavaScript 入门指南》式语言教科书几乎全然不同。它别具一格地以 JavaScript 二十年来的几个主要发展阶段为界,分四大部分梳理出了语言的发展历程。
下面就为大家简单介绍一下吧。
首先是第一部分「语言诞生」,它讲的是 JavaScript 发明之初的故事。
如果把现在的 JavaScript 当作一家上市公司,那么这部分就是创业期从零到一的打拼历程,大致解答了这么些问题:
在 JavaScript 发明之前,互联网处于怎样的状态?
JavaScript 也是需要立项的商业项目,它是怎么拍板决定上马的?
我们都知道 Brendan Eich 花了十天实现了世界上第一个 JS 引擎,他是怎么做到的?这个引擎的技术细节是什么样的呢?
JavaScript 最早的语法是怎么设计出来的?尤其是那个曾经把很多人绕晕的原型设计,到底是怎么一回事呢?
有哪些 JavaScript 的特性,是当时十天冲刺里留下的坑呢?
浏览器大战里的微软,为什么要决定兼容非自家的 JavaScript 呢?他们是如何搞出 JScript 引擎的呢?难道真的做了逆向工程吗?
Brendan Eich 除了十天写出 JS 引擎,后来还花两周彻底重写了引擎。这次重写的目标是让 JavaScript「成为一门更干净的语言」,到底有多干净呢?
JavaScript 诞生之初,舆论是怎么(激烈地)评价它的呢?
然后是第二部分「创立标准」,它介绍的是从 JavaScript 到 ECMAScript 标准的历程。这部分介绍了很多标准化组织的运作方式,同时也解答了很多问题:
为什么要选择 Ecma 作为第三方标准组织呢?
第一次 TC39 会议可不简单,最主要的两个巨头 Netscape 和微软都有着自己的心思。双方在台前幕后到底都做了些什么呢?
最早的 JavaScript 标准(ES1)的制定过程是怎么样的?这里面有什么对现代 JS 产生长远影响的决策呢?
ECMAScript 这个名字是如何确定出来的?
JavaScript 是如何从 Ecma 标准发展为 ISO 国际标准的呢?
在 ES5 之前占据江湖十余年的 ES3 标准,又是怎么制定出来的呢?
为什么只有 ES1 和 ES3,中途没有 ES2 呢?
JavaScript 是怎么样从「Java 的附庸」这个定位中逐渐独立出来,成为 Web 前端开发事实标准的呢?
对了,在第二部分的尾声,两位作者还提出了一个名为「浏览器博弈论」的理论,它能很好地解释 JavaScript 诞生以来,围绕它各项技术创新的成败缘由。
接下来是第三部分「改革失败」,它复盘了一段经典的历史公案,也就是 ES4 的失败。这段故事既牵扯到了当时前沿的编程语言学术研究,又涉及到了微软、Adobe、雅虎等巨头背后的商业利益,在技术和商业层面都有许多看点:
TC39 为什么想要研发下一代语言标准?
TC39 除了折腾 JavaScript 以外,还发布过一些失败的标准,怎么回事呢?
Adobe 的 Flash 和 ActionScript,和 ES4 有什么渊源呢?
2004 年,原本已经淡出语言设计的 Brendan Eich 又加入了 TC39,是什么促使他回归了呢?
当时 ES4 的设计目标是怎样的一门语言呢?
ES4 的设计遭遇了哪些技术和商业上的阻力呢?对此 Ecma 是如何协调解决的呢?
ES4 搁浅后,委员会是如何本着「和谐」理念达成共识的呢?
在这部分的时间线结束之际,JavaScript 的重要性已经获得了普遍的认可。因此本部分末尾介绍了当时的「新气象」,比如 JavaScript 性能革命、模块系统、Node.js,以及「万物均可编译到 JS」的现象等。
最后的第四部分「继往开来」,讲述了 JavaScript 的现代化之路。它介绍了 2009 年 ES5 与 2015 年 ES2015 这两个成功标准背后的故事。这一部分详细地介绍了很多对现代 JS 而言重要的技术内容,相对而言是更需要「啃」的:
ES5 的开发背景,以及其中各项主要语言特性的介绍,如 defineProperty 和严格模式等。
Test262 测试套件的从零到一之路。
从 Harmony 项目(ES2015 前身)到 ES2015 落地之间的社区协作模式演化历程。包括委员会组织与运作机制的更新、若干设计理念的形成过程,以及这中途最有影响力的若干社区技术思潮。
ES2015 中各项重磅语言特性的设计概述,包括 Proxy、块级作用域、类、模块、箭头函数等。
作为一本兼备技术细节与历史八卦的书籍,《JavaScript 二十年》的阅读体验是奇妙的。
阅读它的感受就像是在听一位技术功底深厚的前辈分享过往经历一样,表面上平铺直叙,但时不时总能穿插着引出各种专业的技术概念。
对于基础扎实的同学,相信本书在阅读时既能让你保持着听故事时的畅快感,又能给你串联起技术点时的惊喜。
当然,就算对于偏入门阶段的同学,阅读本书时应当也不会遇到多少阻碍。
这是因为作为一份严谨的研究作品,本书附带了不少辅助资料,比如专业术语表。这份术语表相当于一份简易的「JavaScript 词典」,连续回答了 100 个左右的「什么是函数」和「什么是 JS 引擎」一类的灵魂拷问式问题,对这些概念作出了直接的科普式定义。另外,本书中还有近 500 条参考文献、加入了约 100 条脚注,以及附带了约 400 项的 JavaScript 演化时间线表格。这也算是内容严谨度的一种体现吧。
顺便一提,《JavaScript 二十年》的推荐阵容也是相当强大的。
如《JavaScript 语言精粹》的作者 Douglas Crockford(老道)其实就是两位作者当年在 TC39 的老熟人,他为本书撰写了推荐语。
而《JavaScript 语言精髓与编程实践》的作者周爱民老师也为本书作了序。
另外还有 @justjavac、@死月、@月影、@李玉北、@张云龙、@顾轶灵、@黄轶、@于航、@沈毅、@黄玄、@工业聚、@小爝、@一丝、@题叶、@染陌、@叶俊星、@侯策、@寒雁、@太狼、@敖天羽、@xcatliu、@Himself65 等国内前端社区知名的开发者们撰写推荐语力荐,不容错过噢。
最后,作为这本书的中文版译者,我很希望本书所讲述的 JavaScript 演化故事,能帮助大家对技术与标准有更好的理解。
毕竟今天的 JavaScript 标准已经是集体智慧的结晶,其未来并不掌握在某个权威个体手中,是由社区的共识所决定的。
而即便不在标准委员会中,我们每一次有价值的技术讨论,也都在无形中影响着社区的共识。
在这个日新月异的领域,我很期待未来能看到更多来自中国的声音。
上一个二十年已经尘埃落定,该由我们这一代开发者们来书写自己的故事了。
让我们一同见证 Web 在下一个二十年里的发展吧!
▊《JavaScript 二十年》
Allen,Wirfs-Brock,Brendan,Eich 著
王译锋 译
一个是语言发明人,一个是标准制定者
世界上最了解内幕的人书写的 JS 趣味技术史
跟随当事人穿梭于 JavaScript 二十年发展史之间,从十天发明 JavaScript 的历史故事再到 ES1 标准化的合纵连横,再到 ES4 的失意、ES5 的妥协与 ES6 的成功,本书将为你解答种种“语言为什么要设计成这样”的问题。
评论