所有权

3 文章

库 API 设计第一层

4 分钟

C 库 API 里,一个指针能表达很多事:

int parse_packet(const uint8_t *data, size_t len, struct Packet *out);
void normalize(uint8_t *data, size_t len);
void consume_buffer(uint8_t *data, size_t len);
uint8_t *make_packet(size_t *out_len);

这些签名看起来都和指针有关,但 API 语义完全不同:

  • 只读输入
  • 原地修改
  • 输出结果
  • 接管调用方资源
  • 创建新资源并交给调用方

Rust 库 API 的第一层设计,就是把这些意图写进类型。

阅读更多

所有权:谁拥有,谁释放

4 分钟

C 代码里早就有所有权。

只要一段内存需要 free,一个文件需要 fclose,一个句柄需要释放,就一定存在一个问题:谁负责最后把它释放掉。

C 的问题不是没有所有权,而是所有权通常不在类型里。它靠函数名、注释、调用约定和团队经验维护。Rust 的 ownership 做的事,就是把这些约定变成编译器能检查的规则。

阅读更多