如何正确看待 Google 宣布 Fuchsia 操作系统没有选 Go 作为终端开发语言

polaris · · 2590 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

今天 Go 圈被这条新闻刷屏了(当然还有 Go1.14 发布): > 谷歌新一代开源操作系统 Fuchsia 的开发者网站上公布了一份 [Fuchsia 编辑语言策略](https://fuchsia.googlesource.com/fuchsia/+/refs/heads/master/docs/project/policy/programming_languages.md),文档描述了 C、C++、Dart、Rust 与 Go 的优劣势,并明确指定了其中哪些语言将会在 Fuchsia 开发生态中得到怎样程度的支持。 该策略文档描述了 Fuchsia 项目在 Fuchsia Platform Source Tree(Fuchsia 平台源码树)和供终端开发者在这之外构建 Fuchsia 开发目标设备软件时使用和支持的编程语言。注意谷歌公布的是终端开发语言,什么意思?即对终端开发者的支持,意味着 Fuchsia SDK 需要包含可帮助他们为 Fuchsia 开发软件的工具和库,包括 FIDL(Fuchsia Interface definition language,Fuchsia 接口定义语言)特定语言后端与支持库等。(这里的 end-developers 我认为是 Fuchsia 的应用软件开发人员) ## 语言对比、评价 可见什么 Go 要退出,Go 大败,Go 不行了之类的,真的是没啥意义。谷歌这篇文章说的很清楚,也很清楚的对比了 C、C++、Dart、Rust、Go 这 5 门语言的优缺点,看看谷歌对它们的对比: ### C 优点: - C 是一种广泛使用的语言。该语言具有易于理解的特性,已在很长一段时间内保持稳定,并且过去已用于构建类似的系统。该语言具有成熟的工具链和相关的开发人员工具; - C 具有稳定的 ABI,它使 Fuchsia SDK 包含预编译的二进制文件,供最终开发人员重新使用; - 许多语言可以使用外部函数接口与 C 互操作。支持 C 可使最终开发人员更轻松地将这些语言与 Fuchsia 集成在一起; - 我们目前的终端开发人员已经在使用该语言。 缺点: - 对异步编程的支持很弱; - 用该语言编写的程序通常会由于缺乏内存安全性而导致安全漏洞。 - 用该语言编写的程序通常包含资源泄漏,因为该语言不提供自动释放资源的功能。 - 与 C++ 相比,类型安全性较弱。简单地将某些 C 代码重新编译为 C++通常会导致编译器错误,这些错误会掩盖代码中的潜在错误。 最终决定: - 支持终端开发人员使用 C 语言,这里显示了支持哪个版本 <https://fuchsia.googlesource.com/fuchsia/+/refs/heads/master/docs/concepts/api/c.md#Language-versions>。 - 在 Fuchsia 平台源代码树中,不鼓励使用 C 开发新功能。 - 允许在以下情况下,在 Fuchsia 平台源代码树中使用 C: - 低级系统编程,包括内核中的编程。 - 定义共享库和其他系统组件的 ABI 稳定接口。 ### C++ 优点: - 目前许多终端开发人员都在广泛使用 C++。 - Fuchsia 平台源代码树广泛使用 C++。 - C++是一种广泛使用的语言。语言本身易于理解(译注:这个大家认可吗?),经过长时间的沉淀非常稳定,并且过去已用于构建类似的系统。C++具有成熟的工具链和相关的开发人员工具。 缺点: - 对异步编程的支持很弱。 - 用 C++语言编写的程序常常会因为语言缺乏内存安全性而导致安全漏洞。 最终决定: - 支持终端开发人员使用 C++。 - 允许在 Fuchsia 平台源代码树中使用 C++。 ### Dart 优点: - 目前许多终端开发人员都在使用 Dart。 - Fuchsia 的大部分用户界面都是使用 Flutter 构建的,而 Flutter 使用的是 Dart。 - 可以使用线性流程的代码编写异步程序。 - 使用 Dart 编程的生产力很高。 - Fuchsia 项目有机会影响 Dart 语言的发展。 - Dart 语言提供了内存安全保证,降低了使用该语言开发的软件存在安全漏洞的风险。 缺点: - Dart 语言使用垃圾回收来管理内存,占用的资源比其他内存管理技术更多。 - Dart 语言的运行时环境很大。 - 工具链迫使我们必须在可执行文件大小、性能和启动延迟之间进行权衡,这比其他语言的工具链造成的权衡更糟。 最终决定: - 支持 Dart,主要供非驱动程序的终端开发人员使用。 - 在 Fuchsia 平台源代码树中,允许使用 Dart 开发用户界面和非常驻程序。 ### 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 语言构建的目标设备上的生产软件都必须迁移到批准的语言。 ## 如何正确看待这个决定 首先,对于大部分人来说,关注的是终端开发人员的编程语言支持,毕竟 Fuchsia 平台源码树只有少数人会参与其中。 其次,要知道,Dart 也是谷歌的语言,Fuchsia 公开之初就支持 Dart,文中也说了,Flutter 使用的 Dart,所以支持 Dart 是显而易见的,甚至 Dart 2.0 是专门为它们优化设计的;Dart 最初是为了替代 JavaScript,可见它一开始就更适合做终端开发; 第三,谷歌说了,他们内部在广泛使用 Go,可见并不是谷歌要抛弃 Go,任何语言都有其适用场景,不能因为 Go 是自己的,就一定非得支持,得适合,这是不是说明谷歌这个公司靠谱?! 最后,谷歌对 Fuchsia 的定位是开发一个嵌入式操作系统,这个系统最终有多大的市场,一切还未可知,不能因为它不支持 Go,就说 Go 大败。 最最后,我建议大家多关注下文中说的 Go 的优点,而缺点,更多是对于嵌入式系统来说的“缺点”,其他场景可能是优点。 **Go 的优点:** - Go 是 Google 内部广泛使用的语言。 - gVisor 已使用该语言实现了网络栈,并且已与 Fuchsia 集成在一起。 - 使用 Go 语言编程的生产力很高。 - Fuchsia 项目有机会影响 Go 语言的发展。 - Go 语言提供了内存安全保证,降低了使用该语言开发的软件存在安全漏洞的风险。 - Go 语言有具有广泛的库生态系统,对 Fuchsia 非常实用。 ## 参考 1、https://fuchsia.googlesource.com/fuchsia/+/refs/heads/master/docs/project/policy/programming_languages.md 2、https://www.oschina.net/news/113639/fuchsia-programming-language-policy

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2590 次点击  ∙  1 赞  
加入收藏 微博
4 回复  |  直到 2020-02-27 14:29:46
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传