整理 | 弯月
责编 | 郭芮
出品 | 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 发布 | 极客头条
☞华为最新 5G 折叠机 MateXs 发布,起售价 19000 多元
☞从Kubernetes安全地访问AWS服务,告诉你多云场景下如何管理云凭据!
你点的每一个在看,我认真当成了喜欢
猛戳“阅读原文”,参与报名吧!
转载:https://blog.csdn.net/csdnnews/article/details/104529048