写了很多年C和C++,最大的心累从来不是业务逻辑,而是那些半夜被叫起来救火的内存问题。悬垂指针、数据竞争,出了事往往已经在生产环境跑了几个月,定位起来要人命。
Rust最让我服气的,就是它把这类问题从"靠工程师自觉"变成了"靠编译器保障"。所有权和借用检查这套机制,在编译期就把悬垂引用和并发时的数据竞争挡住了。刚开始写会觉得编译器有点啰嗦,动不动跟你较劲,但磨合一段时间就会发现,它其实是在逼你把脑子里那个自以为对的并发模型里的漏洞提前暴露出来。
再说零成本抽象,这点确实香。写起来像用带高阶特性的现代语言,跑起来性能基本贴着C。配合cargo这套工具链和那个出了名友好的报错提示,一大堆bug根本走不到运行阶段,编译器的报错甚至会告诉你怎么改。
一门语言值不值得爱,我看的就是它能不能让正确变容易、让错误变困难。Rust这一点上做得相当到位。