《JavaScript 20 年》中文在線版發佈

號外號外,由 JS 之父與 ES6 首席做者聯合出品的前端鍵政必讀書《JavaScript 20 年》,歷時半年終於完成了中文翻譯的在線版!javascript

本書又名《沒人比咱們更懂的 JavaScript》和《TC39 執政回憶錄》,詳細記載和解讀了自 1995 年語言誕生到 2015 年 ES6 規範制定爲止,共計 20 年的 JavaScript 演化經歷。全書不只講解了大量語言細節層面的演進,更復盤了更高層面上規範制定與標準博弈中的歷史成敗,是一部講述人類如何在商業與技術上的競爭合做中促進產業發展的故事。html

那麼,在線版比以前連載的專欄文章多了些什麼呢?其實還真很多:前端

  • 加入了共約 500 條的參考文獻超連接。
  • 加入了共約 100 條的腳註超連接。
  • 加入了共約 100 條術語表的註解超連接。
  • 加入了共約 400 項的 JavaScript 演化時間線表格。
  • 加入了可跳轉的章節目錄。
  • 加入了標誌着 JavaScript 誕生的公告稿譯文。
  • 加入了其餘重要附錄表格,如登場人物表與組織表等。
  • 優化了專欄連載中 20 餘份列表和表格的展現,將其由截圖改成 HTML。
  • 修復了原文代碼塊示例中的若干問題,並美化了排版。
  • 改進了連載中過於口語化和非中性的陳述。

通過這些完善,在線版的篇幅已經達到了 25 萬字的水平。下面簡單分享下這些更新裏有趣的料吧:java

參考文獻、腳註和術語表

相比以前的專欄連載版本,在線版的正文中加入了大量連接,其結構與原文保持了一致。它們能給你一種「很專業」的感受。好比下面這段話:node

TC39 [Herman 2008] 同時也對提供具備精簡語義的「lambda 函數」感興趣,好比支持消棧的尾調用g和 Tennent [1981] 一致性原則99。其支持者們認爲,這樣的函數將會在實現由語言或庫所定義的控制抽象時有所用處。在 Harmony 進程早期,Brendan Eich [2008a] 在 es-discuss 上的一篇討論貼中, 提出了一個最初由 Allen Wirfs-Brook 所提出的建議,即基於 Smalltalk 塊語法的啓發,採用一種簡潔的 lambda 函數語法。例如 {|a,b| a+b} 就至關於 Herman 的 lambda(a,b){a+b}。Eich 的帖子引起了一場大規模但沒有結論的線上討論,話題涉及與(某種可能的)簡明函數特性所相關的方方面面。做爲關鍵總結,能夠認爲其中許多語法的靈感會帶來解析或可用性上的問題,並且 JavaScript 的非本地控制轉移語句——returnbreakcontinue——會顯著地使編寫控制抽象的機制變得更加複雜。大多數 TC39 成員和 es-discuss 訂閱者彷佛主要對簡潔的函數語法更感興趣,而非對 Tennent 一致性感興趣。git

加入並校正這些連接,主要是件體力活。其要點大概有這麼幾個:github

  • 參考文獻由 Allen Wirfs-Brock 提供的 BibTeX 解析生成,並在逐條插入過程當中進行了一遍人工校對。
  • 腳註裏有一些八卦,好比 Rust 原做者當年也參加過 TC39 會議之類。
  • 術語表至關於一份簡易的「JavaScript 詞典」。它連續回答了 100 個左右的「什麼是函數」和「什麼是 JS 引擎」一類的靈魂拷問式問題,對這些概念做出了直接的定義。本文由 ACM HOPL-IV 項目團隊中以 Richard Gabriel 和 Guy Steele 爲首的計算機科學家們審校過,相信能夠信賴這些陳述的質量。

JavaScript 演化時間線

這條記載 JavaScript 演化的時間線,對應原文的附錄 E,是一份事無鉅細的表格,像這樣:ajax

這裏咱們能夠直觀地看到,許多影響 JavaScript 和 Web 發展的歷史事件是如何交織在一塊兒的。好比從上圖中咱們就能發現,Brendan Eich 纔剛把 demo 級的 JavaScript 原型寫出來三個月(1.0 都還沒發佈),他供職的 Netscape 就高歌猛進地上市了。再好比咱們也能夠找到 Chrome V8 發佈後,各大主流瀏覽器花了多少時間跟進這項「性能革命」。數據庫

JavaScript 發佈公告

你知道 JavaScript 當年是如何正式發佈的嗎?咱們搬運回了附錄 F 中這份當年 Netscape 和 Sun 聯合發佈的新聞稿,其中天然不乏亮點:編程

有了 JavaScript,就有可能在 HTML 頁面中加入智能的表單。它能夠根據用戶的輸入,在客戶端執行貸款支付或貨幣兌換等計算。而某個用 Java 編寫的多媒體天氣預報 applet 小應用,也能夠經過 JavaScript 腳本,根據某地區當前的天氣讀數來顯示適當的圖像和聲音。服務端的 JavaScript 腳本能夠作到從關係型數據庫中提取數據,並飛快地將其格式化爲 HTML。在頁面中,還可能包含有在客戶端和服務器上都可運行的 JavaScript 腳本。在服務器上,腳本能夠根據存儲在關係型數據庫中的用戶偏好,來動態地組合與格式化出 HTML 內容;在客戶端上,腳本能將各類 Java applet 小應用和 HTML 表格元素粘合在一塊兒,造成一個可實時交互的用戶界面,以進行全網範圍內的信息搜索……

它都預言了些什麼呢?這說的不像是今天咱們還在作的表單嗎?不像是 Node.js 嗎?不像是服務端渲染的 SSR 嗎?不像是 JS 控制 Java 原生組件的 RN 嗎?你看 Netscape 在 25 年前吹的牛逼,整個社區到了 2020 年的今天,竟然也算把它們給實現得八九不離十(強行)。除此以外,附錄資料中還藏着更多的細節,等待着你的發掘。

如何閱讀

咱們申請到了 cn.history.js.org 這個漂亮的域名,另外你也能夠訪問 jshistory-cn 這個 GitHub 項目主頁,二者的閱讀體驗基本是一致的。

在線版使用 GitHub Pages 部署。若是你因爲某些緣由沒法正常解析域名,在 hosts 中配置 185.199.108.153 cn.history.js.org 便可(這其實是對 github.io 的解析問題,參考 GitHub 官方指南)。

另外,因爲新增了大量不便於同步的細節格式優化,最先的知乎專欄連載文章將再也不繼續維護,它們的文中也已添加了相應的 deprecated warning。

最後,這裏還準備了一份目錄可供直達:

歡迎閱讀與指正!

(題圖:原書的兩位做者 Brendan Eich 與 Allen Wirfs-Brock,2011 年)

One More Thing……

咱們正在與博文視點的 @張春雨 老師積極合做,準備推出本書的紙質版。期待你的關注和支持噢!

相關文章
相關標籤/搜索