* Error Handling机制好太多,用Result封装函数运行结果灵活性大大提高,代码也大大简洁
* 函数式编程支持较好,有Lambda这种东西,使得它写起来甚至有Ruby的感觉
* 效率高,没有了GC和Runtime,速度是没得说的
* 支持范型
* 有宏和编译器插件这些黑客技,语言扩展性较好
* 社区活跃度更高,更强调社区的作用,有[RFC](GitHub - rust-lang/rfcs: RFCs for changes to Rust)。[中文社区](Rust China)也有了
Rust的劣势是:
* 语言特性复杂,对新手就不会那么友好
* 稳定性不够,语言的进化较激进
* 第三方库的成熟度还落后于Go,商业化的应用也还不够
要说性能,那是Rust更好。更多的编译期优化、无 GC 等特点加持,开发高性能应用自然是 Rust 性能高。据统计利用 Rust 开发的 RipGrep 性能甚至赛过使用 C 开发的 Grep。
但是性能不是唯一考量,当你纠结 Borrow Check,纠结 unsafe,纠结 copy clone,纠结各种奇怪的类型限制的时候;当你 cargo build 怒草电脑风扇三分钟的时候;人家 GoLang 可能早就发两个版了。
同时 Rust 的语法花活众多,遍历数组可以写循环也可以 for_each() 一行流。不像 GoLang 那么白开水谁写都差不多一个味道,经常第一天想到神来之笔快乐 Coding 到半夜第二天爬起来发现昨晚写的都甚么东西看不懂不如蜘蛛爬,这是坠痛苦的!
Go 的编译器为了个编译速度快连循环不变式提升、循环展开、对齐等等优化一个都不做,函数内敛一堆限制大多数情况都不做(比如函数里有个 for 或者 defer 或者 select 等,或者函数多于 40 个表达式),拥有的优化一只手都能数的过来:
基础优化欠缺,高级优化更是一个没有,和在 Debug 配置编译下的 -O0 优化的 C++ 差不多一个概念(而且跑得更慢),哪来的资本和 rust 比性能。
其他方面:
而且 Go 的 GC 吞吐量也很低,大多数情况下各方面 Go 跑的甚至都比 Java 更慢。只不过得益于 AOT 编译的设计,相比 Java 而言除了内存占用小和启动速度快之外就没有任何优势了,比较适合拿来做性能不关键的命令行工具。
个人还是更喜欢 Rust。