前言
Fuchsia,是由Google公司開發的繼Android和Chrome OS之後的第三個系統,已在Github中公開的部分源碼可以得知。Google對於Fuchsia的說明是“Pink(粉紅)+Purple(紫色)=Fuchsia(燈籠海棠,一個新的操作系統)”。
開發語言
谷歌新一代開源操作系統 Fuchsia 的開發者網站上公佈了一份 Fuchsia 編輯語言策略,文檔描述了 C、C++、Dart、Rust 與 Go 的優劣勢,並明確指定了其中哪些語言將會在 Fuchsia 開發生態中得到怎樣程度的支持。
C
優點:
- C 是一種廣泛使用的語言。該語言具有易於理解的特性,已在很長一段時間內保持穩定,並且過去已用於構建類似的系統。該語言具有成熟的工具鏈和相關的開發人員工具;
- C 具有穩定的 ABI,它使 Fuchsia SDK 包含預編譯的二進制文件,供最終開發人員重新使用;
- 許多語言可以使用外部函數接口與 C 互操作。支持 C 可使最終開發人員更輕鬆地將這些語言與 Fuchsia 集成在一起;
我們目前的終端開發人員已經在使用該語言。
缺點:
- 對異步編程的支持很弱;
- 用該語言編寫的程序通常會由於缺乏內存安全性而導致安全漏洞。
- 用該語言編寫的程序通常包含資源泄漏,因爲該語言不提供自動釋放資源的功能。
- 與 C++ 相比,類型安全性較弱。簡單地將某些 C 代碼重新編譯爲 C++通常會導致編譯器錯誤,這些錯誤會掩蓋代碼中的潛在錯誤。
最終決定:
- 支持終端開發人員使用 C 語言,這裏顯示了支持哪個版本 https://fuchsia.googlesource.com/fuchsia/+/refs/heads/master/docs/concepts/api/c.md#Language-versions。
- 在 Fuchsia 平臺源代碼樹中,不鼓勵使用 C 開發新功能。
- 允許在以下情況下,在 Fuchsia 平臺源代碼樹中使用 C:
- 低級系統編程,包括內核中的編程。
- 定義共享庫和其他系統組件的 ABI 穩定接口。
C++
優點:
- 目前許多終端開發人員都在廣泛使用 C++。
- Fuchsia 平臺源代碼樹廣泛使用 C++。
- C++是一種廣泛使用的語言。語言本身易於理解(譯註:這個大家認可嗎?),經過長時間的沉澱非常穩定,並且過去已用於構建類似的系統。C++具有成熟的工具鏈和相關的開發人員工具。
缺點:
- 對異步編程的支持很弱。
- 用 C++語言編寫的程序常常會因爲語言缺乏內存安全性而導致安全漏洞。
最終決定:
- 支持終端開發人員使用 C++。
- 允許在 Fuchsia 平臺源代碼樹中使用 C++。
Dart
優點:
- 目前許多終端開發人員都在使用 Dart。
- Fuchsia 的大部分用戶界面都是使用 Flutter 構建的,而 Flutter 使用的是 Dart。
- 可以使用線性流程的代碼編寫異步程序。
- 使用 Dart 編程的生產力很高。
- Fuchsia 項目有機會影響 Dart 語言的發展。
- Dart 語言提供了內存安全保證,降低了使用該語言開發的軟件存在安全漏洞的風險。
缺點:
- Dart 語言使用垃圾回收來管理內存,佔用的資源比其他內存管理技術更多。
- Dart 語言的運行時環境很大。
- 工具鏈迫使我們必須在可執行文件大小、性能和啓動延遲之間進行權衡,這比其他語言的工具鏈造成的權衡更糟。
最終決定:
- 支持 Dart,主要供非驅動程序的終端開發人員使用。
- 在 Fuchsia 平臺源代碼樹中,允許使用 Dart 開發用戶界面和非常駐程序。
Rust
優點:
- Fuchsia 平臺源代碼樹在使用 Rust 方面有很多積極的實現經驗。
- Rust 提供了內存安全保證,降低了使用該語言開發的軟件存在安全漏洞的風險。
- 可以使用線性流程的代碼編寫異步程序。
- Fuchsia 項目有機會影響 Rust 語言的發展。
缺點:
- Rust 不是一種廣泛使用的語言。語言的特性尚未得到很好地理解,該語言選擇了不尋常的語言設計點(例如,借用檢查器),而且歷史相對較短。
- 目前我們的終端開發人員都沒有使用 Rust。
最終決定:
- 不支持終端開發人員使用 Rust。
- 允許在 Fuchsia 平臺源代碼樹中使用 Rust,但以下情況除外:
- kernel:Zircon 內核是使用一組受限制的技術構建的,這些技術在建立生產操作系統方面有良好的記錄。
Go
優點:
- Go 是 Google 內部廣泛使用的語言。
- gVisor 已使用該語言實現了網絡堆棧,並且該網絡堆棧已與 Fuchsia 集成在一起。
- 使用 Go 語言編程的生產力很高。
- Fuchsia 項目有機會影響 Go 語言的發展。
- Go 語言提供了內存安全保證,降低了使用該語言開發的軟件存在安全漏洞的風險。
- Go 語言有具有廣泛的庫生態系統,對 Fuchsia 非常實用。
缺點:
- Go 語言使用垃圾回收來管理內存,佔用的資源比其他內存管理技術更多。
- Go 語言的運行時環境很大。
- Fuchsia 平臺源代碼樹在使用 Go 方面具有負面的實現經驗。在 Fuchsia 項目,用 Go 構建的系統組件佔用的內存和內核資源比 C++或 Rust 等更多。
- 工具鏈會產生較大二進制文件。
最終選擇:
- 不支持終端開發人員使用 Go,但以下情況除外:- 網絡棧。將網絡棧遷移到另一種語言上需要大量投資。如果時間允許,我們應該將網絡棧遷移到批准的語言。
- 其他在 Fuchsia 中使用 Go 語言構建的目標設備上的生產軟件都必須遷移到批准的語言。