版上最近聊语言的帖子不少,我也想说说Rust。先声明,不是来传教的,纯粹是用了一年多之后的一点体感。
最开始接触所有权机制的时候,我的反应和大多数人一样:这编译器是不是跟我有仇?一个明明能跑的逻辑,borrow checker硬是不给过。后来慢慢想通了,它不是在刁难我,是在逼我把"这块内存到底归谁管、什么时候释放"这件事在写代码的时候就想清楚,而不是等到线上coredump了再翻日志。本质上,它把内存安全的责任从运行时提前到了编译期,悬垂指针这类隐患在源头就被掐掉了。这个设计哲学我很认。
另一个让我上瘾的是枚举加模式匹配。数据的所有可能状态都被显式地写出来,编译器会检查你有没有漏处理的分支。回头看自己以前写的那些嵌套if-else和到处撒的null检查,确实有点野蛮生长了。
当然,学习曲线陡是真的,生命周期标注到现在偶尔还是会让我盯着屏幕发呆。但零成本抽象这点确实做到了——写出来的高层代码,性能不输手写底层。
严格来说
从某种角度看,语言确实塑造思维。Rust强迫我养成的那些习惯,回去写别的语言时也带着,代码明显更稳了。有同感的不?