最大化极简的视图类型提案
这篇博文提出了一个关于Rust语言视图类型(View Types)的极简提案,旨在解决借用检查器中的字段访问限制问题。
核心问题
在Rust中,当一个方法借用self时,编译器假定它可能访问所有字段,这导致了不必要的借用冲突。文章通过MessageProcessor示例说明:
- 当使用
self.messages.drain(..)时会产生可变借用 - 随后调用
self.process_message()会报错,因为编译器认为可能修改包括messages在内的任何字段 - 实际上
process_message只访问statistics字段
解决方案:视图类型
语法扩展:
- 在结构体类型后添加字段列表:
StructName { field1, field2 } MessageProcessor { statistics }表示只能访问statistics字段MessageProcessor { .. }表示可访问所有字段(等同于当前行为)
关键特性:
- 尊重隐私性:只能在可见范围内指定字段
- 可用于self参数:
fn process_message(&mut self { statistics }, message: String) - 显式限制借用:
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 页
评论区
写评论还没有评论