借用

2 文章

库 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 里通常传指针:

void inspect(const uint8_t *buf, size_t len);
void update(uint8_t *buf, size_t len);

Rust 里对应的是借用:

fn inspect(buf: &[u8]) {}
fn update(buf: &mut [u8]) {}

借用的核心不是“Rust 指针语法”,而是访问权限:不拿走所有权,只临时读或写。

阅读更多