Fuchsia 程式設計語言政策

範圍

本文件說明 Fuchsia 專案針對在目標裝置上執行的實際工作環境軟體所編寫的程式設計語言,並支援在 Fuchsia 平台來源樹狀結構中,以及供開發人員建構軟體,在 Fuchsia 來源平台樹狀結構外的目標 Fuchsia 裝置上執行的軟體。

這項政策不適用於 (a) 開發人員在目標或主機裝置上執行的開發人員工具,或 (b) 目標裝置上並非以一般使用者運作裝置運作的軟體。舉例來說,這項政策不適用於 zxdb (偵錯工具) 所編寫的語言,因為 zxdb 是供開發人員執行的開發人員工具,不會在目標裝置上執行。不過,這項政策適用於 pkgfs,因為 pkgfs (檔案系統) 會在裝置正常的使用者作業期間執行。

這項政策是許可清單。我們不會將下方明確允許的語言視為不允許。

定義

「Fuchsia Platform Source Tree」是代管於 fuchsia.googlesource.com 的原始碼。Fuchsia 平台來源樹狀圖可以吸收更大規模的 Fuchsia 系統及其基礎技術變更,因為變更只會影響 Fuchsia 平台來源樹狀結構,而不需要與其他人員協調。

「開發人員」是指在 Fuchsia 平台來源樹狀結構外編寫的 Fuchsia 軟體的人員。與僅影響 Fuchsia 平台來源樹狀結構的變更相比,會影響開發人員的變更需要更多協調,且所需執行的時間也更長。

支援終端開發人員是指 Fuchsia IDK 內含的工具和程式庫,可協助使用者使用該語言開發 Fuchsia 適用的軟體,包括適用於 FIDL 的語言專屬後端 (和支援程式庫)。支援也意味著一定程度的說明文件,包括教學課程和範例,以及開發人員關係的投資項目。

加強非同步程式設計支援;也就是說,您可以使用直行程式碼編寫非同步程式,例如在 Rust 和 Dart 等語言中使用 async/await。

「強式封裝」是物件導向程式設計語言中的藝術術語。這表示該語言可讓類別設計人員針對該類別的欄位和物件強制執行瀏覽權限規則 (例如 C++ 或 Java 中的 private)。

語言

C

數據分析

  • 優點:C 是廣受使用的語言,這種語言具有清楚易懂的屬性,且在長時間下來相當穩定,過去用於建構類似系統。這個語言具備成熟的工具鍊和相關開發人員工具。
  • Pro:C 有穩定的 ABI,讓 Fuchsia IDK 包含可供開發人員重複使用的預先建構二進位檔。
  • Pro:許多語言都能透過外函式介面與 C 互通。支援 C 可讓開發人員更輕鬆地將這些語言與 Fuchsia 整合。
  • 優點:我們目前的資深開發人員已在使用這種語言。
  • Con:支援非同步程式設計。
  • 缺點:使用這種語言編寫的程式通常會因語言缺乏記憶體安全,而造成安全性錯誤。
  • Con:使用語言編寫的程式通常包含資源外洩,因為該語言不提供自動釋出資源的功能。
  • Con:與 C++ 相比,類型安全性較弱。只要將部分 C 程式碼以 C++ 重新編譯,通常會導致編譯器錯誤,進而在程式碼中顯示潛在錯誤。

審查結果

  • 開發人員可使用 C 程式碼。(請參閱支援的 C 版本清單)。
  • 在 Fuchsia 平台來源樹狀結構中,不建議使用 C 的新用途。請洽詢相關擁有者,瞭解是否要使用 C 做為新程式碼。
  • C 已獲準用於 Fuchsia 平台來源樹狀結構:
    • 以便進行低階系統程式設計,包括在核心內
    • ,為共用程式庫和其他系統元件定義 ABI 穩定版。

C++

數據分析

  • 優點:我們目前的許多開發人員都大量使用 C++。
  • 專家:Fuchsia 平台來源樹狀結構廣泛使用 C++。
  • 優點:C++ 是廣受使用的程式語言,這種語言具有清楚易懂的屬性,且在長時間下來相當穩定,過去用於建構類似系統。這個語言具備成熟的工具鍊和相關開發人員工具。
  • Con:支援非同步程式設計。
  • Con:由於語言沒有記憶體安全,以該語言編寫的程式往往會有安全性錯誤。

審查結果

  • 開發人員支援 C++。(請參閱支援的 C++ 版本清單)。
  • C++ 已獲核准,可在 Fuchsia 平台來源樹狀結構中使用。

飛鏢

數據分析

  • 專業:可使用直行程式碼編寫非同步程式。
  • 專家:語言使用者的工作效率高。
  • 優點:該語言提供記憶體安全保證,減少以包含安全性錯誤的語言開發軟體的風險。
  • 缺點:語言使用垃圾收集來管理記憶體,比管理記憶體的其他技巧更耗用資源。
  • 缺點:這種語言具備大量的執行階段環境。
  • 缺點:工具鍊強制在二進位檔大小、效能與啟動延遲時間之間做出取捨,這點比其他語言工具鍊提供的取捨。
  • Con:更新 Fuchsia 平台來源樹中的 Dart 語言、執行階段和程式庫,經證實能減輕維護負擔。這些程式庫會大量使用 SDK,但樹狀結構外開發。這會將 Dart 和 Fuchsia 版本串連在一起,使更新困難重重。

審查結果

  • Dart 支援指定非駕駛員的最終開發人員。
  • 根據 RFC-0176,Fchsia 平台來源樹狀結構中已加入許可清單使用 Dart,而加入許可清單的新項目需要豁免。

Rust

數據分析

  • 專家:Fuchsia Platform Source Tree 在使用 Rust 時擁有良好的實作經驗。
  • 優點:該語言提供記憶體安全保證,減少以包含安全性錯誤的語言開發軟體的風險。
  • 專業:可使用直行程式碼編寫非同步程式。
  • 專家:Fuschsia 專案有機會影響語言的演進。
  • 缺點:Rust 並非廣為使用的語言,語言屬性尚未清楚瞭解,已選取不尋常的語言設計點 (例如借用檢查器),而且僅存在一小段時間。
  • 缺點:我們目前的所有開發人員都使用 Rust。

審查結果

  • 端對端開發人員不支援 Rust。
  • Rust 獲準用於 Fuchsia 平台來源樹狀結構,但有以下例外狀況:
    • kernel。Zircon 核心的建構基礎是採用一組受限制的技術,這些技術已經擁有良好產業軌道,可用於實際工作環境作業系統。

查看

數據分析

  • Pro:Go 是 Google 內部廣泛使用的語言,
  • Pro:gVisor 已實作使用語言的網路堆疊,並且網路堆疊已經與 Fuchsia 整合。
  • 專家:語言使用者的工作效率高。
  • 專家:Fuschsia 專案有機會影響語言的演進。
  • 優點:該語言提供記憶體安全保證,減少以包含安全性錯誤的語言開發軟體的風險。
  • 優點:這種語言有豐富的程式庫生態系統,或許適用於 Fuchsia 應用程式。
  • 缺點:語言使用垃圾收集來管理記憶體,比管理記憶體的其他技巧更耗用資源。
  • 缺點:這種語言具備大量的執行階段環境。
  • Con:Fuchsia Platform Source Tree 使用 Go 的實作體驗不佳。Gochsia 專案透過 Gochsia 專案建構的系統元件使用的記憶體和核心資源,超過 Fuchsia 專案使用 C++ 或 Rust 建構的對應項目 (或取代項目)。
  • 缺點:工具鍊會產生大型二進位檔。

審查結果

  • Go 未通過審核,但有下列例外狀況:
    • netstack。將網路堆疊遷移至其他語言,需要投入大量心力。在這段期間,我們應該將 Nettack 遷移至經過核准的語言。
  • 針對目標裝置上的生產軟體,在 Fuchsia 平台來源樹狀結構中對 Go 的其他用途,都必須遷移至經過核准的語言。

Python

數據分析

  • 專家:這種語言普遍使用這類語言。
  • 專家:語言會用於 Fuchsia 許多開放原始碼依附元件的建構系統。
  • 專家:語言使用者的工作效率高。
  • 優點:語言具有完整的貢獻者和程式庫生態系統,可能對 Fuchsia 有幫助。
  • 優點:該語言提供記憶體安全保證,減少以包含安全性錯誤的語言開發軟體的風險。
  • 缺點:語言使用垃圾收集來管理記憶體,比管理記憶體的其他技巧更耗用資源。
  • 缺點:這種語言具備大量的執行階段環境。
  • Con:語言在處理 C++、Rust 或 Dart 時無法發揮效能,
  • 缺點:程式通常會在執行期間偵測到程式錯誤,而不會偵測到靜態錯誤。
  • 缺點:語言缺乏強烈封裝。

審查結果

  • 根據 RFC-0221,Python 3 已獲開發人員核准,可用於系統測試。
  • Python 3 已獲準用於 Fuchsia 平台來源樹狀結構,可達成以下目的:
    • 建構
    • 主機工具
    • 系統測試
  • Python 2.7 已淘汰,且 Fuchsia Platform 來源樹狀結構中的現有用途必須遷移至經過核准的語言。