整理 | 弯月
责编 | 郭芮
出品 | CSDN(ID:CSDNnews)
目前许多终端开发人员都在使用Dart。
Fuchsia的大部分用户界面都是使用Flutter构建的,而Flutter使用的是Dart。
可以使用线性流程的代码编写异步程序。
使用Dart编程的生产力很高。
Fuchsia项目有机会影响Dart语言的发展。
Dart语言提供了内存安全保证,降低了使用该语言开发的软件存在安全漏洞的风险。
缺点:
Dart语言使用垃圾回收来管理内存,占用的资源比其他内存管理技术更多。
Dart语言的运行时环境很大。
工具链迫使我们必须在可执行文件大小、性能和启动延迟之间进行权衡,这比其他语言的工具链造成的权衡更糟。
最终决定:
支持Dart,主要供非驱动程序的终端开发人员使用。
在Fuchsia平台源代码树中,允许使用Dart开发用户界面和非常驻程序。
C
C是一种广泛使用的语言。语言本身易于理解,经过长时间的沉淀非常稳定,并且过去已用于构建类似的系统。C语言具有成熟的工具链和相关的开发人员工具。
C具有稳定的ABI,可让Fuchsia SDK包含预编译的二进制文件,方便终端开发人员重复使用。
许多语言可以使用外部函数接口与C互操作。支持C可以方便终端开发人员轻松地将这些语言与Fuchsia集成在一起。
我们目前的终端开发人员都在使用C语言。
缺点:
对异步编程的支持很弱。
用C语言编写的程序常常会因为语言缺乏内存安全性而导致安全漏洞。
用C语言编写的程序常常包含资源泄漏,因为C没有提供自动释放资源的功能。
与C++相比,类型安全性较弱。直接将某些C代码当作C++重新编译,常常产生编译器错误,暴露出代码中被掩盖的错误。
最终决定:
支持终端开发人员使用C语言。
在Fuchsia平台源代码树中,不鼓励使用C开发新功能。
允许在以下情况下,在Fuchsia平台源代码树中使用C:
低级系统编程,包括内核中的编程。
定义共享库和其他系统组件的ABI稳定接口。
C++
目前许多终端开发人员都在广泛使用C++。
Fuchsia平台源代码树广泛使用C++。
C++是一种广泛使用的语言。语言本身易于理解,经过长时间的沉淀非常稳定,并且过去已用于构建类似的系统。C++具有成熟的工具链和相关的开发人员工具。
缺点:
对异步编程的支持很弱。
用C++语言编写的程序常常会因为语言缺乏内存安全性而导致安全漏洞。
最终决定:
支持终端开发人员使用C++。
允许在Fuchsia平台源代码树中使用C++。
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语言构建的目标设备上的生产软件都必须迁移到批准的语言。