Maximally minimal view types

来源: smallcultfollowing.com | 作者: Niko Matsakis | 日期: 2026-03-21

概述

本文描述了一个最大化最小化的view types提议,源自RustNation上与lcnr和Jack Huey的讨论。这是一个关于改进Rust语言的"处于迷雾中"的想法,基本上所有人都想做,但需要克服一些障碍。

核心问题: borrow checker不知道一个方法只会访问struct的某些字段。当你对self.messages调用drain时,同时调用self.process_message,编译器会认为两者冲突,因为不知道process_message只访问statistics字段。

示例:MessageProcessor

pub struct MessageProcessor {
    messages: Vec<String>,
    statistics: Statistics,
}

基本工作流程:

  • 通过push将消息累积到self.messages
  • drain累积的消息并处理它们
  • 重用底层buffer来push未来的消息

View Types语法

View types的基本思想是扩展struct类型语法,可选地包含可访问字段列表:

RustType := StructName<...> { field1, field2, ... }

例如,MessageProcessor { statistics }表示"一个只可以访问statistics字段的MessageProcessor结构体"。

关键特性

  • 隐私尊重: view types遵守隐私规则,只能在可以访问字段的上下文中使用
  • 运行时只是指针: view types是纯静态构造,不改变编译方式
  • Borrow checker集成: 对于view borrow,记录多个loan而不是单一loan

实现难度

作者认为实现难度不大,"如果我们找到一个想要承担的贡献者,今年就可以发货"。

FAQ

必须显式指定字段吗?

当前设计需要显式写&mut place {field1, field2}。未来可能引入行类型多态性(row polymorphism)来推断。

语法歧义

存在一些语法歧义问题,比如&mut some_variable { messages }可能被解析为struct表达式或borrow。需要进一步解决。

结论

这是一个好的MVP,值得发货。这是对Rust语言的一个重要潜在改进,解决了长期以来的borrow checker限制问题。

标签: Rust, View Types, Borrow Checker, 编程语言设计