跳转到内容

第一篇 内存与所有权

你可能已经会写另一门语言,也可能刚写了一阵 Rust。所有权、移动、引用、生命周期这些词,单独看都懂,放在一起却像一套要背的禁令:为什么给 String 赋值会让旧变量失效,为什么把值传给函数之后调用方就不能再用,为什么引用不能活过它的所有者。

这一篇不急着给答案。先把内存的物理层补回来:一次函数调用在栈上留下什么,堆上的数据在调用返回后去了哪,变量、指针、字节之间是什么关系。规则从这些事实里长出来,才扎得下根。

如果你从 Java 或 Python 来,这层直觉可能是空的:那些语言把内存的物理细节藏在了运行时后面,你平时不用想它;到了 Rust,同一套机制突然要求你自己看懂。

这一篇不展开类型系统,也不碰可变引用、并发和 unsafe。类型怎么接住这些规则,读写怎么分工,多个所有者怎么处理,都往后放。

这一篇分两章。从自动释放到所有权先推导模型,六节按顺序接住上一步留下的问题;变量与赋值再把模型用到代码里,区分声明、初始化、重新赋值与遮蔽。

读完这一篇,你能复述推演链,也能自己写一段短程序:判断哪些变量还能使用,字符串由谁释放,以及同名的新声明是否改变了旧值的释放责任。