RustGoCpp比较
最近在用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,不方便