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

Go 大败!Google 宣布 Fuchsia 终端开发只支持 C/C++/Dart
  • 整理 | 弯月
  • 责编 | 郭芮
  • 出品 | CSDN(ID:CSDNnews)

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界面的正式官方语言。

1 编程语言选型考虑

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语言构建的目标设备上的生产软件都必须迁移到批准的语言。

2 开发者怎么看?

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

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

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

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

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

参考链接:

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

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

本文为CSDN编译文章,转载请注明出处。

【End】

原文出处:微信公众号【弯月】,作者【CSDN】

原文链接:https://mp.weixin.qq.com/s/snL8V2x4XfYDKV4boSsBCw

本文观点不代表Dotnet9立场,转载请联系原作者。

发表评论

登录后才能评论