×

Go 大败!Google 宣布 Fuchsia 终端开发只支持 C/C++/Dart

作者:andy0012020.02.28来源:Web前端之家浏览:6858评论:0
关键词:CC++DartGo

Android和Chrome OS是Google最广为人知的两款操作系统,但近年来Google的第三款操作系统Fuchsia也在逐步崛起。

Fuchsia与Android和Chrome OS这两款系统有点不同,它并不基于Linux内核,而是基于新的名为Zircon的微内核,受Little Kernel启发,用于嵌入式系统,主要使用C语言和C++编写。Fuchsia的设计目标之一是可运行在众多的设备上,包括移动电话和个人电脑。

近日,该操作系统更新发布了“Fuchsia Programming Language Policy”文档,分享了 Fuchsia 在编程语言选型上的考虑。针对C、C++、Dart、Rust、Go进行优劣对比,最终Dart击败了Rust和Go语言,成为用户UI界面的正式官方语言。

编程语言选型考虑

Dart

优点:

目前许多终端开发人员都在使用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语言构建的目标设备上的生产软件都必须迁移到批准的语言。

开发者怎么看?

Google 能够针对不同语言的优缺点,从技术的角度进行重点分析,十分难能可贵。通常,这类的分析会掺杂个人的偏见或者市场营销的考虑,但是Google这样做的目的是真正地考察每种语言在开发Fuchsia OS方面的技术优势。

从上述分析中,我们可以看出,老牌编程语言 C 和 C++ 的江湖地位稳固,得到了官方开发人员的认可。

在新兴编程语言中, Google 向 Dart 亮了绿灯。然而,由于垃圾回收和大量的运行时环境,Dart消耗的资源更多,对于常驻程序而言并不理想。

虽然 Go 出自 Google,但由于他们的负面经历,Go已被列入了黑名单,除了网络栈之外,其他代码都需要迁移到批准的语言,想必 Google 的心情也五味陈杂。

Rust 落选的原因有点委屈,最大的缺点似乎是这种语言太新,尚未广泛使用,并且其独特的特性尚未经过充分的实践检验,但是由于Rust的性能比Go高,需要的资源更少,因此仍有可能被认可。

本文为CSDN编译

参考链接:

https://fuchsia.googlesource.com/fuchsia/+/refs/heads/master/docs/project/policy/programming_languages.md

https://news.ycombinator.com/item?id=22409838

您的支持是我们创作的动力!
温馨提示:本文作者系,经Web前端之家编辑修改或补充,转载请注明出处和本文链接:
https://www.jiangweishan.com/article/web238409823098509823.html

网友评论文明上网理性发言已有0人参与

发表评论: