查看原文
其他

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

弯月 CSDN 2020-10-16

整理 | 弯月

责编 | 郭芮

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

编程语言选型考虑

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高,需要的资源更少,因此仍有可能被认可。
参考链接:
https://fuchsia.googlesource.com/fuchsia/+/refs/heads/master/docs/project/policy/programming_languages.md
https://news.ycombinator.com/item?id=22409838
本文为CSDN编译文章,转载请注明出处。
【End】
在中国企业与「远程办公」正面相遇满月之际,2月29日,CSDN 联合广大「远程办公」工具服务企业共同举办【抗击疫情,科技公司在行动】系列之【远程办公】专题线上峰会活动:中国「远程办公」大考
扫下方二维码或点击阅读原文免费报名直播+抽取奖品+与大牛交流
提前了解峰会详情,可加小助手微信csdnai,回复远程办公,进直播群
推荐阅读 
微信上线「行程查询」服务;钉钉 CEO 回应被打「一星」;Go 1.14 发布 | 极客头条
远程办公是巨头游戏?十倍扩容,他们如何做到百万级并发流量
干货!从0到1教你打造一个令人上瘾的聊天机器人?
华为最新 5G 折叠机 MateXs 发布,起售价 19000 多元
从Kubernetes安全地访问AWS服务,告诉你多云场景下如何管理云凭据!
游戏之道
你点的每一个在看,我认真当成了喜欢
猛戳“阅读原文”,参与报名吧!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存