實作並發布 JavaScript/WebAssembly 語言功能

一般來說,V8 遵循 Blink 意圖流程,針對已定義的共識標準,適用於 JavaScript 和 WebAssembly 語言功能。V8 特定的勘誤表列於下方。請遵循 Blink 意圖流程,除非勘誤表另有說明。

如果您對 JavaScript 功能有任何疑問,請寄電子郵件至 syg@chromium.org 和 v8-dev@googlegroups.com。

對於 WebAssembly 功能,請寄電子郵件至 gdeepti@chromium.org 和 v8-dev@googlegroups.com。

勘誤表 #

JavaScript 功能通常會等到第 3 階段以上 #

根據經驗法則,V8 會等到 JavaScript 功能建議進展到 TC39 的第 3 階段或更高 才會實作。TC39 有自己的共識流程,而第 3 階段或更高表示 TC39 代表之間的明確共識,包括所有瀏覽器供應商,表示功能建議已準備好實作。這個外部共識流程表示第 3 階段以上的功能不需要發送意圖電子郵件,除了發送發布意圖。

TAG 檢閱 #

對於較小的 JavaScript 或 WebAssembly 功能,不需要 TAG 檢閱,因為 TC39 和 Wasm CG 已提供重要的技術監督。如果功能較大或跨領域(例如,需要變更其他 Web 平台 API 或修改 Chromium),建議進行 TAG 檢閱。

需要 V8 和 Blink 旗標 #

在實作功能時,需要 V8 旗標和 Blink base::Feature

需要 Blink 功能,以便 Chrome 可以在緊急情況下關閉功能,而無需分發新的二進位檔。這通常在 gin/gin_features.hgin/gin_features.ccgin/v8_initializer.cc 中實作。

需要執行模糊測試才能發布 #

JavaScript 和 WebAssembly 功能必須模糊測試至少 4 週,或一個 (1) 發行里程碑,並修正所有模糊測試錯誤,才能發布。

對於程式碼完成的 JavaScript 功能,請將功能旗標移至 src/flags/flag-definitions.h 中的 JAVASCRIPT_STAGED_FEATURES_BASE 巨集,以開始模糊測試。

對於 WebAssembly,請參閱 WebAssembly 發布檢查清單

Chrome 狀態 和審查閘門 #

Blink 意圖流程包括一系列審查閘門,必須在 Chrome 狀態 中功能項目中獲得核准,才能發出意圖發布,尋求 API 所有者的核准。

這些閘門專門針對網路 API,有些閘門可能不適用於 JavaScript 和 WebAssembly 功能。以下是廣泛的指導方針。具體情況因功能而異;請勿盲目套用指導方針!

隱私 #

大多數 JavaScript 和 WebAssembly 功能都不會影響隱私。在少數情況下,功能可能會新增新的指紋向量,揭露使用者的作業系統或硬體資訊。

安全性 #

雖然 JavaScript 和 WebAssembly 是安全漏洞中常見的攻擊媒介,但大多數新功能不會新增額外的攻擊面。需要執行 模糊測試,以降低部分風險。

影響已知常見攻擊媒介(例如 JavaScript 中的 ArrayBuffer)的功能,以及可能啟用側頻道攻擊的功能,需要額外審查和必須接受審查。

企業 #

在 TC39 和 Wasm CG 的標準化過程中,JavaScript 和 WebAssembly 功能已經接受嚴格的向後相容性審查。功能故意向後不相容的情況極為罕見。

對於 JavaScript,最近發布的功能也可以透過 chrome://flags/#disable-javascript-harmony-shipping 停用。

可除錯性 #

JavaScript 和 WebAssembly 功能的可除錯性因功能而異。僅新增內建方法的 JavaScript 功能不需要額外的除錯器支援,而新增新功能的 WebAssembly 功能可能需要大量的額外除錯器支援。

如需更多詳細資訊,請參閱 JavaScript 功能除錯檢查清單WebAssembly 功能除錯檢查清單

如有疑問,此閘門適用。

測試 #

對於 JavaScript 功能,Test262 測試就足夠了,而對於 WebAssembly 功能,WebAssembly 規格測試就足夠了,無需 WPT。

無需新增 Web Platform 測試 (WPT),因為 JavaScript 和 WebAssembly 語言功能有自己的可互操作測試儲存庫,由多個實作執行。如果你認為有益,還是可以自由新增一些。

對於 JavaScript 功能,需要在 Test262 中進行明確的正確性測試。請注意,暫存目錄 中的測試就已足夠。

對於 WebAssembly 功能,需要在 WebAssembly Spec Test 儲存庫 中進行明確的正確性測試。

對於效能測試,JavaScript 已成為大多數現有效能基準的基礎,例如 Speedometer。

要 CC 給誰 #

每個「打算$something」電子郵件(例如「打算實作」)都應該 CC v8-users@googlegroups.com,除了 blink-dev@chromium.org 之外。這樣一來,其他 V8 嵌入程式也能隨時掌握進度。

連結到規格儲存庫 #

Blink 意圖程序需要一個說明文件。你可以連結到相關的規格儲存庫,而不是撰寫新文件(例如 import.meta)。