iT邦幫忙

2025 iThome 鐵人賽

DAY 2
0

GAS於2020年從Rhino引擎轉移到V8引擎,現在可以於GAS上使用大部分ES6+語法,但仍有一些特性並不支援,例如ES6 modules。

前言

昨天(Day01)提到,我先建置過靜態網頁,接著才寫GAS腳本以自動化處理Google Sheets。由於當初沒有先搞清楚GAS環境不同於瀏覽器環境的特性,用寫前端專案的直覺來寫GAS專案,邊寫邊踩雷。在分享踩雷故事與GAS的特性之前,我想先聊聊現在可以說是一方之霸的V8引擎,一個Chrome、Node.js和GAS等都使用的引擎。

正文

GAS環境於2020年從Rhino引擎轉移到V8引擎,並計畫於2026年1月底完全停止支援Rhino引擎。現在可以於GAS上使用大部分ES6+語法,但仍有一些特性尚未支援,例如ES6 modules。[^1]

先稍微回顧一下歷史:現代JavaScript語言能形成一套ES標準、甚至能誕生前端工程師這個職位,與Adobe和各家瀏覽器廠商的商業競爭有非常大的關係。非常粗略地就結論來說,Flash身為早期Web1.0時代用來補充瀏覽器功能、由Adobe開發與維護的軟體,被Apple陣營的賈伯斯帶頭封殺後,各家瀏覽器廠商才在競合關係下,協議了各個標準,包含具有明確分水嶺的ES6標準。

V8引擎正是2025年的現在,屬於市占率最高[^2]、影響力最強,用來執行JavaScript的引擎,甚至連微軟都放棄自家引擎(討厭兼容IE的前端同學們歡呼),於2020年也改用Chromium / V8引擎。[^ 3]就我觀察,這幾年通常Chrome會最先搭載最新版本的V8引擎,Deno緊跟其後,接著是Node.js,GAS則因為GCP與Workspace的特性而比較慢。

在Rhino引擎時代,有些人會主張Google Apps Script是JavaScript的方言。[^4]實際上,直到現在,GAS環境上的js檔案的副檔名仍然是gs。我沒經歷過Rhino引擎時期,主觀臆測當初Google Workspace團隊並沒有打算完全對齊ES標準,有點類似Adobe ExtendScript的定位。

總之,在這系列文章,我會偏好把GAS視為用來執行以JavaScript語言所撰寫的指令文檔之環境(或者以ES2025的用詞:host environment)。[^ 5]

後話

我之所以會想探究GAS的引擎與歷史,一來是因為隨著在不同應用程式與runtime上用過不同腳本語言與程式語言,想更釐清自己如何看待這些語言間的關係。不是基於某些學術上的分類,而僅僅是我自己想要建構一套可以說服自己的架構。由於我不是資工系背景,相比於精確的技術分類,我的切角是商業上的競合協議,與實質上最被廣泛採用的技術與該技術的主要維護者。二來是查找資料或使用GenAI時,時常會看到ES5-的語法,在稍微了解GAS演進的歷史後,我也能有更大的脈絡去判讀資訊。

Reference

[^1]: 官方文件:「Caution: ES6 modules are not yet supported.」

[^2]: 除了瀏覽器,還有VS Code、Figma、Slack、Discord、Notion、Obsidian等應用程式。

[^3]: 微軟於技術市場上的讓步,我認為非常大幅地間接影響到前端的技術框架,例如當前先模擬虛擬DOM再diff再更新DOM的做法也正被挑戰中。

[^4]: 例如2023年鐵人賽,ugmさん主張:「Google Apps Script是一種程式碼語言,語法類似Javascript」

[^5]: https://tc39.es/ecma262/2025/#host-environment


上一篇
Day01|前言
下一篇
Day03|globalThis標準與GAS的全域物件
系列文
我只是不想加班:一名客服人員的GAS自救之路3
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言