最近在用Golang做了一个中型项目开发,从零搭建,所以学到很多,加上之前私下做的俩golang项目和在公司做的三四个golang项目,我也算是用golang做了不少小玩意儿了。所以计划好好学一下golang。

期间接触了一点python,但如之前用flask那次一样,死活没爱。而WEB前端这块我还在犹豫到底是学JS ES6,7呢还是TS,加上最近工作和它有点远,还是暂时挂起。

而最近发现一个更好玩的语言,Rust,简直令我沉迷,连Go都快被我抛弃了~哈哈。

这里记录下Go, C++, Rust的一些初步了解,以供自己参考。

没错,我打算以后用Rust开发游戏客户端,Web的话就TS。

特点

Go: 并行,简洁

Rust: 安全,规矩多

C++: 高性能,强大的自由

##一句话描述

Go: “做正确事情的C;Python的替代品”

Rust: “务实的Haskhell;安全的C++”

C++: “能力非常非常强大”

积极领域

Go: 服务器(特别是网站http服务器),分布式系统,网络编程,自动化工具

Rust: 操作系统,底层基础软件,性能要求高的软件(如游戏,ML)

C++: 操作系统,嵌入式开发,底层基础软件,性能要求高的软件(如游戏,ML)

跨平台能力

Go: 简洁便利

Rust: 比C++简单一些

C++: 困难

基本库支持

Go: 非常强大

Rust: 比较强大

C++: 基本无意义

内存管理

Go: 根据对象生命周期,自动推断是放在堆上还是栈上,有自动GC。Go的GC是高频低延迟的,Java则是低频率高延迟的,所以Go的GC稍微没有那么明显,但依然有额外开销。

Rust: 手动声明内存分配在堆上还是栈上,然后通过scopes进行管理。所以使用者必须了解内存分配。

C++:自行控制内存分配,使用者必须了解内存分配。

开发效率和学习难度

Go: 学习曲线比较平缓。开发很快,但运行期间测试问题很多。

Rust: 入手相对较难,概念较多,但比C++强。开发较慢,但运行期间出问题的概率较低。

C++:入手难,精通更难。开发非常慢,运行期间出问题概率高。

泛型支持

Go: 不支持。导致很多人用interface{}模拟。

Rust: 支持。

C++: 支持。

性能优化分析

Go: pprof很方便强大。

Rust: 无

C++: 无

编译构建速度

Go: 快的很

Rust: 和C++有一拼……

C++: 不联编的话会要命

包版本管理工具

Go: 有简单的基本工具,但还需改进

Rust: 依赖Cargo

C++: 无

单元测试

Go: 自带testing,但过于简单,建议考虑使用 testify 库

Rust: 没有完整的单元测试支持,但是可以使用assert做检查

C++: 没有完整的单元测试支持,但是可以使用assert做检查

注释

Go: 自带GoDoc,不太方便

Rust: 使用MdBook,支持Markdown,很舒服

C++: 使用doxygen,不方便