rust go对比选择

Rust和Go似乎都是系统编程语言,都编译为机器码,并且都提供了出色的性能。那么,您如何决定哪种语言适合您的需要呢?

Rust

Rust于2010年上市,尽管它的构思可能要早得多。Rust通常被视为ML语言家族的一个扩展。Mozilla是Rust的审核人(underwriter) ,Servo browser engine(由Mozilla赞助)是使用Rust构建的。利用Rust的并发性和所有权优势的Servo项目的一些目标是:(i)改进并行性(ii)更好的安全性(iii)增加模块化(iv)优越的性能。

Rust 1.0于2015年5月发布。rust1.33.0于2019年2月发布。社区对rust有强有力的支持。社区项目的一些例子,比如一个用Rust编写的操作系统redox;一个线性代数和计算机图形库cgmath;还有Iron,一个并发web框架。

为什么选择rust?

  1. 出色的运行速度(可与C/ c++媲美)——在测试中,它的性能优于Go(在某些情况下,速度比Go快一个数量级)
  2. 减少运行时开销,减少垃圾收集暂停
  3. 对于并发性、安全性和/或性能至关重要的任务,它非常强大
  4. 复杂的代码,可进行细粒度的系统控制,例如:
  • 丰富的模式:切片模式和范围模式(slice and range patterns)
  • 新颖的嵌入:postgres和python扩展、加密库、rust的内核
  • 丰富的语法扩展:编译时间正则表达式、SQL语句、docopt
  • 移动语义:静态冻结/解冻(static freeze/thaw),使用容器的迭代器
  • 它被称为“开发人员最喜爱的语言”,73%的开发人员表示他们希望继续使用它
  • 可与C、FFI和其他语言互操作
  • 零成本的抽象
  • 大的社区支持
  • 以traits的形式支持泛型
  • 使用Cargo进行简单的包管理,允许轻松访问一系列有用的库,并为每个单独的项目提供内置版本控制和完全分离
  1. 安全方面-rust提供各种保障,包括:
  • 不能容忍不安全的内存访问
  • 可预测的运行时行为(没有垃圾收集器,没有成本抽象)
  • 针对低级威胁(如空指针和竞争条件)的安全性
  • 几乎完全控制硬件,包括内存布局和处理器功能
  • rust节省了测试、调试和崩溃的时间

为什么不选择rust?

  1. rust需要比go更陡峭的学习曲线
  2. rust并不简单,在大多数人能够有效地处理它之前,需要投入大量的时间来学习和掌握它;工程师马蒂亚斯·安德(Matthias Ender)将rust描述为“难搞的”,他花了“好几个月”才变得“有点生产力”。
  3. 在学习新概念之前,旧习惯很可能要先改掉
  4. Go提供了更直接的面向参与者的并发性,而在Rust中,这是留给程序员来处理的
  5. Rust以编译速度慢而闻名
  6. 标准库中缺少异步网络功能
  7. 在类似的情况下,Rust可能比C和c++稍微慢一些

Golang

Golang (Go)是2007年谷歌构思的,它是对该公司在开发软件基础设施时遇到的一些问题的一种回击。诸如网络系统、web编程模型和大规模计算集群所带来的问题,都是通过变通方法而不是直接解决的。由于服务器程序需要数百或数千名程序员组成数千万行代码,规模问题也发生了巨大的变化。构建时间也在增长。

根据谷歌的Rob Pike的说法,Go“被设计和开发出来是为了让在这种环境下工作更有效率。”除了其众所周知的方面,如内置并发性和垃圾收集,Go的设计考虑还包括严格的依赖关系管理、软件体系结构随系统增长的适应性以及组件之间边界的健壮性。

它于2009年11月公开,并继续作为一个开源项目。实际上,谷歌导入的是公共存储库,而不是相反。有影响力的前辈包括Hoare的CSP、Alef和Pike的Newsqueak。2012年达到1.0。Go 1.12于2019年2月发布。最新功能的亮点包括“选择加入对TLS 1.3的支持,改进的模块支持(为成为Go 1.13的默认选项做准备),对windows/arm的支持,以及改进的macOS和iOS向前兼容性。”

go在全球数千个系统中使用;它最大的成功案例之一是Docker是用Go构建的。

为什么选择golang?

  1. Speed—这是一种快速的静态类型语言,可以快速编译成机器码
  2. 虽然测试速度并不一定比Rust快,但是Go比许多其他语言都要快,比如Java、c#、JavaScript和Python
  3. 简单的代码
  4. Go简洁、实用、高效
  5. 关注程序员在整个软件开发周期中的生产力
  6. 灵活性- Go独特的类型系统允许灵活和模块化的程序构建
  7. 并发性——Go将并发性作为一个基本的概念来关注
  8. 简单的安全-不会容忍不安全的内存访问
  9. Go擅长编写微服务和简单的“DevOps”任务【DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称】
  10. 与C语言和其他语言的互操作性
  11. IDE支持
  12. 简单的错误处理

为什么不选择go?

  1. go不是一种系统编程语言
  2. Go牺牲了性能的一些元素,专注于其简单性和正交性的目标
  3. Go允许通过cgo实现一些互操作性,但是,这不是编写Go程序的预期方式
  4. go没有泛型
  5. 除了一些本机类型外,它缺乏不可变特性(rust 的 mut)
  6. 垃圾收集可能会损害性能并降低编译时错误检查的功能

结论

如果您正在设计一个需要处理大量流量的web服务,并且希望能够同时进行垂直和水平伸缩,那么这两种语言都可以很好地工作。许多业内人士表示,Go速度更快,所以如果您有一个大型开发团队或许多服务需要编写,那么Go可能是更好的语言选择。Go和Rust都不能容忍不安全的内存访问。

Rust被描述为“一种更高级的语言,可以通过各种可能的方式进行开发”,并且“与任何其他编程语言相比,它几乎是无懈可击的”。然而,go更受欢迎,部分原因是它相对简单,开发时间较短。

这两种语言一直被视为竞争对手,部分原因是它们几乎同时出现,但正如我们所看到的,情况未必如此。Go将重点放在简单性和一致性上,允许开发人员获得更简单的编程体验。它通过对简单性的严格应用提高了大型编程团队的效率。同时,Rust使开发人员能够在粒度级别上进行控制,从控制线程与系统其他部分的行为,到控制变量的生存期。

Rust与c++、D语言直接竞争空间,也就是说,对于那些准备接受更复杂的语法和语义以获得最佳性能(如微控制器、AAA游戏引擎和web引擎)的程序员来说,Rust可用于更复杂的领域中。

与此同时,Go更像是2006年后Internet 2.0一代公司的竞争对手,这些公司希望使用比基于JVM的语言更简单的解决方案,并且已经超越了Ruby、Python和Node.js (v8)等语言。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页