SuperAPI AI 工具集

salsa

编程与开发

查看项目

更新于 10-15 23:41

技能介绍

用途:Salsa 是 Rust 的增量计算框架,用于在输入变化后只重新执行依赖真正改变的函数,跳过其余计算。它支撑 rust-analyzer、ty(Python 类型检查器)和 Cairo 等需要在大代码库小改动后亚秒级响应的项目。本技能用于构建或审查 Salsa 数据库、追踪函数、输入等时重置心智模型。

主要能力:定义输入与纯函数,Salsa 记忆化每次函数调用并自动追踪依赖;输入变更产生新修订,仅重跑受影响部分。核心概念包括:数据库(#[salsa::db] 结构体,存储所有缓存数据,是唯一事实来源);输入(#[salsa::input],唯一可变结构体,外部数据入口);追踪函数(#[salsa::tracked],结果被记忆化的纯函数);追踪结构体(在追踪函数内创建,逐字段变更追踪);驻留结构体(#[salsa::interned],相同数据映射相同整数 ID,用于廉价相等比较);累加器(#[salsa::accumulator],从追踪函数报告诊断而不影响返回值)。另有修订与红绿算法、回填(backdating)、持久度(LOW/MEDIUM/HIGH)、LRU、no_eq、循环处理、取消支持等。

使用方式:创建数据库实例,用输入构造数据,调用追踪函数计算,修改输入后重新计算,Salsa 复用未变部分。示例:let db = MyDatabase::default(); let file = SourceFile::new(&db, "fn main() {}".into(), path); let result = analyze(&db, file); file.set_text(&mut db).to("fn main() { 42 }".into()); let result = analyze(&db, file);

适用场景:构建或审查 Salsa 数据库、追踪函数、输入、追踪结构体、驻留结构体、累加器;设计查询图;处理递归/循环查询;LSP 或 CLI 中支持取消;用持久度优化;测试增量复用;用 LRU 和 no_eq 控制内存;构建基于 Salsa 的 LSP 服务器;从原型扩展到生产规模。

限制:资料未提供安装命令、版本要求、收费或价格信息。Salsa 最难的部分是粒度、身份和追踪对象的设计决策。进一步阅读:Salsa book https://salsa-rs.github.io/salsa/ ,仓库 https://github.com/salsa-rs/salsa 。