GO 和 RUST
所属分类 go
浏览量 830
Rust vs. Go: Why They’re Better Together
开发者生产力 可扩展性 安全性和并发性
Go和Rust都是专注于生产高效代码的编译语言
编写高效并行代码
MercadoLibre公司 使用go 服务器数量减少到原来的八分之一 ,从32台服务器减少到4台
go 代码更干净,更可维护
亚马逊
使用Rust来提供 简单存储服务(Amazon S3) 弹性计算云(Amazon EC2) 等服务
基于Linux的容器操作系统Bottlerocket
Go的静态类型系统非常简单,易于推理,并发性是一等公民,
Go的标准库既无比精致强大,又切中要害。
安装一个标准的Go,再使用一个gRPC库和一个数据库连接器,
服务器端几乎不需要其他的东西,每个工程师都能看懂代码,看懂库
Go和Rust都有包管理系统,允许开发人员列出一个简单的清单,
列出想要构建的包,语言工具就会自动获取 维护这些包
安全性
缓冲区溢出 use-after-free(内存释放继续使用)等
Go是强静态类型化的,没有隐式转换,但语法开销还是小得惊人
这是通过赋值中简单的类型推理与非类型化的数值常量一起实现的
这使得Go比Java(有隐式转换)具有更强的类型安全性,但代码读起来更像Python(有非类型变量)
真正的可移植性
一次编写,随处编译
Go和Rust 原生支持交叉编译,消除了旧编译语言常见的 build farm
交叉编译 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码
Go 生产优化 ,拥有较小的内存占用,开箱即用,易于交叉编译到其他架构
Go代码被编译成单一的静态二进制,可以轻松将其容器化
并且通过扩展,可以很轻松地将Go部署到任何高可用环境(如K8S)中
云基础设施 Docker
go 十几M的Docker文件
java 数百M的Docker镜像文件
Rust,高性能 可移植 ,可以轻松在 Linux Android Mac iOS 和Windows上运行
Go开箱即有出色的性能,在设计上,几乎没有预留任何开关可以从Go中榨取更多的性能
Rust的设计是为了能够从代码中榨取每一滴性能 , 然而Rust性能提升是以额外的复杂性为代价的
Dropbox工程师通过将Python代码移植到Go中,往往可以看到5倍的性能提升和延迟下降
与Python相比,内存使用率往往会大幅下降,因为没有GIL,进程数可能会减少
在内存受限时,比如在桌面客户端软件或某些服务器进程中,转而使用Rust,因为Rust中的手动内存管理效率大大高于Go GC
Go快速迭代
Rust的编译时间更长
Go类型系统的天才之处在于调用者可以定义Interface,允许库返回仅需满足小接口但却支持扩展的结构
Rust类型系统的天才设计在于匹配语法与Result< >的结合,可以静态地确定每一种可能性都会被处理,永远不必发明空值来满足未使用的返回参数
易学性
有很多团队能够在几周内采用Go并将Go服务/应用投入生产的故事
Rust由于其复杂性,被认为是一门难学的语言
一般来说,学习Rust需要几个月的时间才能感觉到自如,但这种额外的复杂性也带来了精确的控制和性能的提高
当时,没有一个团队成员知道Go,但在一个月内,每个人都在用Go写作
Go是为了最大限度地提高用户效率而创建的
Rust
作为一种具有强大内存安全性的语言,它是边缘处理的好选择
作为一种具有巨大热情的语言,它成为了重写组件的流行语言
对于大多数公司和用户来说,Go是正确的默认选择
它的性能很强,Go很容易采用,而且Go的高度模块化特性使它特别适合需求不断变化或发展的情况。
随着产品逐渐成熟,需求趋于稳定,可能会有机会从性能的边际增长中获得巨大的胜利 ,尝试使用Rust
上一篇
下一篇
Rust语言设计理念及优缺点
mysql DATE_ADD 函数
C++ RAII 简介
gcc编译过程
HTTP调用卡住的案例
cc gcc g++ 区别