實作並發布 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.h
、gin/gin_features.cc
和 gin/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
)。