谷歌新一代开源操作系统 Fuchsia 的开发者网站上公布了一份 Fuchsia 编辑语言策略,文档描述了 C、C++、Dart、Rust 与 Go 的优劣势,并明确指定了其中哪些语言将会在 Fuchsia 开发生态中得到怎样程度的支持。
该策略文档描述了 Fuchsia 项目在 Fuchsia Platform Source Tree(Fuchsia 平台源码树)和供终端开发者在这之外构建 Fuchsia 开发目标设备软件时使用和支持的编程语言。
Fuchsia Platform Source Tree 是 fuchsia.googlesource.com 上托管的 Fuchsia 源码,终端开发者是指在 Fuchsia Platform Source Tree 之外为 Fuchsia 编写软件的人。与终端开发者相比,Fuchsia Platform Source Tree 可以汇聚对 Fuchsia 系统及其基础技术更大的更改,因为可以执行仅影响 Fuchsia Platform Source Tree 的更改,而无需与其他人员进行协调。相反,影响终端开发者的更改需要更多的协调,并且需要更长的执行时间。
谷歌介绍,对终端开发者的支持意味着 Fuchsia SDK 需要包含可帮助他们为 Fuchsia 开发软件的工具和库,包括 FIDL(Fuchsia Interface definition language,Fuchsia 接口定义语言)特定语言后端与支持库等。对异步编程的强大支持则意味着可以使用直线型代码,例如使用 Rust/Dart 等语言的 async/await 编写异步程序。
文档接下来分别罗列了几种编程语言,分析了它们的优缺点之后,得出如下结论:
C
- C 被支持用于终端开发者。
- 在 Fuchsia Platform Source Tree 中,不鼓励使用 C 的新用法,并且仅批准用于以下领域:
- 用于底层系统编程,包括内核中
- 用于定义到共享库和其它系统组件的 ABI 稳定接口
C++
- C++ 被支持用于终端开发者。
- 批准在整个 Fuchsia Platform Source Tree 中使用 C++。
Dart
- Dart 被支持用于面向非驱动程序的终端开发者。
- Dart 被批准在 Fuchsia Platform Source Tree 中用于用户界面和无限期运行的程序。
Rust
- 终端开发者不支持使用 Rust。
- 除了 Zircon 内核,Rust 被批准在整个 Fuchsia Platform Source Tree 中使用。
Go
- Go 仅被批准在网络技术栈中使用,因为网络栈的迁移需要大量成本。时间准许的话,应该将网络栈迁移到批准的语言。
- 必须将 Fuchsia 中用于目标设备上生产软件的所有其它 Go 代码迁移到批准的语言。
总结一下,Go 在 Fuchsia 生态中可能会有些失落,值得注意的是文档中关于其缺点的介绍:
- 使用垃圾回收来管理内存,这比其它用于管理内存的技术占用更多的资源
- 运行时环境庞大
- Fuchsia Platform Source Tree 在使用 Go 方面具有负面的实施经验。Fuchsia 项目在 Go 中构建的系统组件消耗的内存和内核资源相比使用 C++ 或 Rust 构建的同类组件更多
- 工具链产生大型二进制文件
值得关注的是,文档中没有涉及 Fuchsia 已经确认支持的 Python。不过关于 Python 的支持细节,支持语言页面也没有详细内容,只有一栏栏 TODO,应该是还没有做好准备。
而另一方面,此前关于支持 JavaScript 的传言,看来也无法得证。