Rust 内存安全模型:所有权系统深度解析
Rust 的所有权系统一开始像一堵墙,熟悉之后会发现它更像一套提前暴露问题的设计工具。
所有权解决什么问题
传统语言常把内存安全问题留到运行时,Rust 则尽量把悬垂引用、重复释放和数据竞争提前到编译期处理。
fn main() {
let name = String::from("lizao");
let moved = name;
println!("{}", moved);
}
借用与生命周期
借用允许函数临时使用值而不取得所有权。生命周期标注并不是延长变量寿命,而是告诉编译器不同引用之间的有效范围关系。
当你开始顺着 borrow checker 的提示调整结构时,通常也在顺手整理数据所有权。
从报错里学习设计
不要急着和编译器对抗。多数借用错误都在提醒你:某个数据结构同时承担了太多角色,或者状态流转还不够清晰。
实践建议
先用拥有所有权的数据结构把功能跑通,再逐步收紧借用边界。等模型稳定之后,再考虑泛型、trait 和零拷贝优化。