ES 規範爲什麼總在 6 月發版?

雲棲號資訊:【點擊查看更多行業資訊
在這裏您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!


一.JavaScript 的誕生

1995 年 5 月,一個叫 Brendan Eich 的人花 10 天創造了 JavaScript

二.JavaScript 語言的標準化

最初 JavaScript 語言有 2 份標準:

  • ECMA-262:主標準,由 ECMA 國際組織(Ecma International)負責管理
  • ISO/IEC 16262:第二標準,由國際標準化組織(ISO,International Organization for Standardization)和國際電子技術委員會(IEC,International Electrotechnical Commission)負責管理

出於商標版權的原因,規範標準中將這門語言稱爲 ECMAScript,所以原則上 JavaScript 與 ECMAScript 指的是同一個東西,但有時也會加以區分:

  • JavaScript:指語言及其實現
  • ECMAScript:指語言標準及語言版本,比如 ES6 表示語言(標準)的第 6 版

P.S.ECMAScript 中的 ECMA 取自負責管理主標準的 ECMA 國際組織,這個組織最初叫歐洲計算機制造商協會(European Computer Manufacturers Association),後來影響範圍不限於歐洲,遂更名爲 ECMA 國際組織(Ecma International)

三.ES規範版本歷史

  • ECMAScript 1(1997 年 6 月):規範第一版
  • ECMAScript 2(1998 年 6 月):爲了同步 ISO 標準,引入了一些小更新
  • ECMAScript 3(1999 年 12 月):增加了正則表達式、字符串處理、控制語句(do-while、switch)、異常處理(try-catch)等衆多核心特性
  • ECMAScript 4(2008 年 7 月廢除):本來是一次大規模升級(靜態類型、模塊、命名空間等),但跨度過大,出現了分歧,最終沒能推廣使用
  • ECMAScript 5(2009 年 12 月):變化不大,加了一些標準庫特性和嚴格模式
  • ECMAScript 5.1(2011 年 6 月):又一次小更新,爲了同步 ISO 標準
  • ECMAScript 6(2015 年 6 月):一大波更新,實現了當年 ES4 的許多設想,並正式改爲按年份命名規範版本
  • ECMAScript 2016(2016 年 6 月):第一個年度版本,與 ES6 相比,發佈週期較短,新特性也相對少些
  • ECMAScript 2017(2017 年 6 月):第二個年度版本

以後的 ECMAScript 版本(ES2018、ES2019、ES2020 等)都在 6 月正式獲准生效

四.TC39 標準制定流程

從 ES6 來看,發版週期過長存在 2 個問題:

  • 版本之間的時間跨度太長,提早定稿的特性要等待非常長的時間,一直等到規範正式發佈(才能被實現和使用),而靠後的特性往往趕在最後發版期限之前才定稿,存在風險
  • 語言特性的設計與實現和使用相隔太久,在實現和使用階段才發現設計缺陷爲時已晚

爲此,TC39(ECMA 國際組織第 39 號技術委員會)啓動了新的流程:

1

P.S.ECMA 國際組織設有衆多技術委員會,除 TC39 ECMAScript 外,還有 TC43 Universal 3D (U3D)、TC45 Office Open XML Formats 等等。

主要變化在於:

  • ECMAScript 各項特性獨立設計,歷經 5 個階段,從 Stage 0(Strawman,初稿)開始,經 Stage 1(提案)、Stage 2(草案)、Stage 3(候選提案),最後到 Stage 4(Finished,過審提案)結束
  • 要求在後幾個階段進行原型實現和實際測試(由Test 262負責),以便在設計和實現之間形成反饋循環
  • ECMAScript 每年發佈一版,囊括截止最後發版日期之前所有已經進入第 4 階段的特性

所以,從 ES2016 開始(新 TC39 流程施行以來),ES 版本的概念被大大弱化了,需要關心的是特性提案處於第幾階段,只要進入第 4 階段就已經算是標準特性了,會在下一個 6 月正式納入標準

P.S.按照TC39 流程文檔,應該是每年 7 月發版:

July: Approval of new standard by the ECMA General Assembly

但實際發版時間是每年 6 月,可能是爲了紀念歷史上那些 6 月發佈的元老版本

五.向後兼容原則

我們發現 ES 規範每一版始終完全兼容先前的所有特性,比如 ES6 提出了let、const但並沒有幹掉var,這是因爲如果推出了不兼容的新版本,會造成一些問題:

  • JavaScript 引擎、IDE、構建工具都會變得臃腫,因爲要支持新舊兩版規範
  • 開發者需要知道版本之間的差異
  • 要麼把現有的代碼全都遷移到新版本,要麼(不同項目)混用多個版本,重構會變得很麻煩
  • 甚至要標註每段代碼的所屬版本,就像 ES5 手動開啓嚴格模式一樣,當時沒有流行起來的一個原因是在文件或函數開頭添加指令也很麻煩

爲了避免這些問題,ES6 採用了一種策略叫One JavaScript:

  • 新版本始終完全向後兼容(但偶爾可能會有輕微、不明顯的清理)
  • 舊特性不刪除也不修復,而是引入更好的版本,比如let就是var的改進版
  • 如果語言的某些方面有變化,只在新的語法結構內生效,即隱式選用,例如,yield只在generator中才是關鍵字、模塊和類中的所有代碼都默認開啓嚴格模式

【雲棲號在線課堂】每天都有產品技術專家分享!
課程地址:https://yqh.aliyun.com/live

立即加入社羣,與專家面對面,及時瞭解課程最新動態!
【雲棲號在線課堂 社羣】https://c.tb.cn/F3.Z8gvnK

原文發佈時間:2020-07-08
本文作者:ayqy賈傑
本文來自:“掘金”,瞭解相關信息可以關注“掘金”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章