iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 2
0
Modern Web

從ES到ESNext - 30天輕鬆掌握ECMAScript系列 第 2

[Day02] ECMAScript 與 Javascript

認識 Ecma International

ecma

Ecma International ,前名為 European Computer Manufacturers Association(歐洲電腦製造商協會),是一個制定電腦硬體、通訊、程式語言標準的非營利組織。由於這幾十年來訂定的大量標準,多被採納為國際標準。為了因應國際化,才改為現名。

在程式語言的領域中,這個組織訂定很多有名而且廣為應用的規範,像是 C#、C++,以及本系列的主題 - ECMAScript、到近幾年逐漸備受注目的 Dart 等。

ECMAScript 的誕生

YURI 現在可以靠 Javascript混口飯吃作為一技之長,最重要的人物就是 Netscape 的 前技術長 Brendan Eich。在他待在 Netscape 的這段期間,為了能優化瀏覽器的互動效果,開發出輕量、腳本式的語言,並且命名為 Mocha。

那後來又怎麼會叫做 Javascript 呢?

Netscape 內部因為考量這個語言有參考到 Java 的一些特性,所以後來就以 Javascript 的名稱公開發布。在這之後提交給 Ecma International 進行標準化,代號為 ECMA-262,並且定義這個標準的名稱為 ECMAScript。

ECMAScript 的實現

有了 ECMAScript 的標準出現,加上開發需求的增加,各家公司便積極發展各自的語言,像是微軟的 JScript、VBScript,跟 Adobe 的 ActionScript 等。

近幾年發展下來,Javascript 比其他後進語言的實現度來的高,加上 Google 開發的 V8 引擎和 NodeJS 的大幅應用,讓 Javascript 成為 ECMAScript 最主要的實現。在 WEB 開發上,已經成為不可或缺的角色之一。

ECMAScript 的進化

前端工程師近幾年最有感的,除了 UI 框架以外,應該就是幾乎每年一變的 ESXXXX。到底這些新語法都是誰來制定的呢?

TC-39

tc-39

TC-39(Technical Committee No.39)是 Ecma International 底下負責制定 ECMAScript 標準的機構。

在初期的時候,因為工作流程傳統,而且當時有多方角力試圖影響,中間最長有 10 年的時間處於停滯的狀態。

後來一些重量級公司的人物的加入、以及現代化開發的需求遽增,他們精簡修訂的過程,並且使用Github促進開源社區的參與。讓 ECMAScript 的發展再度活躍起來。

目前從一個提案出來到納入下一版的標準,通常會依序進行以下階段 ─

Stage0 (Strawperson)

由 TC-39 的成員提出,或有其他人向機構提交且並還沒否決的討論或想法。

目前在官方 Github 的 Stage 0 Proposals看到的有:

等至少 10 多項提案。

Stage1 (Proposal)

已正式成為提案,並持續觀察與其他提案的相互影響。提案本身要有主要的語法描述、使用範例等具體內容。

目前在官方 Github 的 Stage 1 Proposals看到的有:

等至少 60 多個提案。

這個階段的部分提案會有提供 polyfill 或 library 的實現,有興趣的人也可以找來試玩看看。

Stage2 (Draft)

提案已有初步的文稿,並且可能會有 Javascript 引擎(like V8)或是編譯器(like Babel)提供實驗性的功能來實現。

例如 Intl.DurationFormat 取得持續時間

Stage3 (Candidate)

這個階段已經成為侯選提案,等待機構和相關貢獻者的簽呈。這時內容不會有太多改變,並且確定至少會有瀏覽器的原生支持、polyfill 或轉譯器可以支持。

例如 Intl.DisplayNames 顯示語言、區域、貨幣等翻譯

目前在官方 Github 的文件中,stage2 跟 stage3 列表的統整在這裡

Stage4 (Finished)

當規範至少通過兩個驗收測試,就會進到這個階段,並且等待下一版釋出時,成為修訂的內容之一。

像是預計 2021 年發布的 Promise.any

目前在官方 Github 的 Finished Proposals 可以查看。

題外話 - Babel

如果你跟 YURI 一樣使用 babel 或 webpack+babel-loader 轉譯程式,而且想在專案中使用還在 stage 階段的語法特性的話,可以到官方 Githubplugin-proposal-開頭的目錄,然後安裝下來。

接著在設定檔裡的plugin加入就好囉

options: {
    plugins: [
            '@babel/plugin-proposal-function-bind',
            '@babel/plugin-proposal-async-generator-functions',
        ],
}

目前版本總覽

版號 發布日期 描述
1 1997.6 初版
2 1998.6 修正格式以符合國際標準
3 1999.12 重大版本,為大家熟悉的 ES3。主要新增功能完整的正規表達式、例外處理等
4 ------- 政治因素和分歧被停擺 10 年。其中部分內容成為下一版標準
5 2009.12 重大版本, 為大家熟悉的 ES5。主要新增嚴格模式(strict mode)
5.1 2011.6 修正格式以符合國際標準
6 2015.6 重大版本,因要求須每年做一次版本的釋出,所以往後的正式名稱成為 ES 加上西元年份。正式名稱為 ES2015
7 2016.6 正式名稱為 ES2016
8 2017.6 正式名稱為 ES2017
9 2018.6 正式名稱為 ES2018
10 2019.6 正式名稱為 ES2019
11 2020.6 正式名稱為 ES2020
Next ------- 為下一版釋出前的通稱

小結

經過今天的整理,希望大家都能對 ECMAScript 的發展以及與 Javascipt 的關係有更進一步的認識。明天開始會介紹從 ES2015 以來的主要語法,敬請期待囉!

參考資源


上一篇
[Day01] 小編的話與主題列表
下一篇
[Day03] ES2015(ES6) - 變數(Variable)
系列文
從ES到ESNext - 30天輕鬆掌握ECMAScript30

尚未有邦友留言

立即登入留言