< 返回版块

Mike Tang 发表于 2026-03-27 14:37

最大化极简的视图类型提案

这篇博文提出了一个关于Rust语言视图类型(View Types)的极简提案,旨在解决借用检查器中的字段访问限制问题。

核心问题

在Rust中,当一个方法借用self时,编译器假定它可能访问所有字段,这导致了不必要的借用冲突。文章通过MessageProcessor示例说明:

  • 当使用self.messages.drain(..)时会产生可变借用
  • 随后调用self.process_message()会报错,因为编译器认为可能修改包括messages在内的任何字段
  • 实际上process_message只访问statistics字段

解决方案:视图类型

语法扩展:

  • 在结构体类型后添加字段列表:StructName { field1, field2 }
  • MessageProcessor { statistics } 表示只能访问statistics字段
  • MessageProcessor { .. } 表示可访问所有字段(等同于当前行为)

关键特性:

  1. 尊重隐私性:只能在可见范围内指定字段
  2. 可用于self参数
    fn process_message(&mut self { statistics }, message: String)
    
  3. 显式限制借用
    let messages = &mut some_variable { messages };
    

优势

  • 让借用检查器明确知道方法访问哪些字段
  • 避免不必要的代码重构
  • 使合理的代码能够直接通过编译

https://smallcultfollowing.com/babysteps/blog/2026/03/21/view-types-max-min/

wiki-route:维基百科最短路径查找工具

wiki-route 是一个用于查找任意两个维基百科文章之间最短路径的工具,可以解决"维基百科游戏"问题。

核心特点

  • 功能:找到连接任意两篇维基百科文章的最短超链接路径
  • 架构:采用客户端/服务器架构,通过Unix域套接字通信
  • 性能:查询响应近乎即时,因为图数据已预加载到内存中

工作原理

  • 算法:使用双向BFS(广度优先搜索)
    • 将维基百科文章视为有向图(文章=节点,超链接=边)
    • 同时从起点和终点进行搜索,逐层扩展
    • 当两个搜索前沿相遇时,保证找到最短路径
    • 比单向BFS快得多,因为搜索空间随深度呈指数增长

系统架构

  • 服务器端 (wiki-route-server):

    • 解析MediaWiki SQL转储文件
    • 在内存中构建图结构
    • 监听Unix套接字上的查询请求
    • 可将图数据预计算并保存为.bin文件,加快后续启动速度
  • 客户端 (wiki-route):

    • 轻量级CLI工具
    • 连接服务器发送查询并打印结果

数据来源

需要从Wikimedia数据库转储下载三个SQL文件:

  • page.sql - 页面元数据
  • pagelinks.sql - 页面间链接
  • linktarget.sql - 链接目标解析表

支持英文维基(约700万文章)和简单英文维基(约28万文章)

使用方法

启动服务器

  • 首次从SQL加载:wiki-route-server -v --sql-dir sql/ --save-dir data/
  • 从预计算数据加载:wiki-route-server -v --data-dir data/

查询示例

wiki-route United_States France
# 输出:United_States -> NATO -> France

许可证

MIT许可证

https://github.com/michal-pielka/wiki-route

--

From 日报小组 Mike

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页