工具推荐·阅读约 2 分钟·
Rust Glancer:把 Rust 语言服务器的内存压到 100MB 以下,rust-analyzer 之外的轻量选择

Rust Glancer:把 Rust 语言服务器的内存压到 100MB 以下,rust-analyzer 之外的轻量选择

一个花了 4 个月开发的 Rust LSP 替代实现,通过'冻结分析结果'的核心设计,把大型项目的语言服务器内存占用从 GB 级压到 100MB 以下,还能免重索引热重启。

原文来源:Rust Glancer 博客 — 一位 Rust 开发者用 4 个月写出替代 rust-analyzer 的语言服务器,核心卖点是内存占用压到 100MB 以下、重启免重索引,发布当天冲上 Hacker News 热榜。

rust-analyzer 是 Rust 生态的事实标准语言服务器,几乎所有 Rust 开发者每天都要靠它拿到补全、跳转和类型提示。但它的内存占用一直是个老大难——大型 workspace 动辄吃掉 2GB 甚至更多内存。Rust Glancer 是最近冒出来的替代实现:目标是把合理规模项目的 LSP 内存压到 100MB 以下,并且重启编辑器后不需要重新索引。项目发布后在 Hacker News 上获得了 370+ 分,讨论非常热烈。

它解决什么问题

用 Rust 做大型项目的人对两个痛点应该不陌生。第一是内存:rust-analyzer 用 salsa 做增量查询数据库、用 rowan 做语法树,两者都天生和内存绑定,大型 workspace 吃几个 GB 很常见。作者的工作流是两台显示器各开一个 IDE、一个 workspace 里塞一堆项目,内存消耗直接翻倍——他上次遇到的情况是 rust-analyzer 吃掉了 16GB 内存,而且每次打开 VS Code,风扇就开始狂转。

第二是初始索引:尤其是开了 build scripts 和 proc macros 的项目,rust-analyzer 首次索引要等很久,而且每次重启编辑器都要重新来一遍。

—— 广告 ——

核心设计:冻结的分析结果

Rust Glancer 的关键思路一句话就能说清:不做增量分析,而是维护一份"冻结"的分析结果,在保存文件时才失效

rust-analyzer 选择增量架构是为了快——每次按键只重解析变化的部分。但代价是分析结果必须常驻内存。Rust Glancer 反其道而行:把整个 workspace 索引一次,结果落到文件系统,查询时按需加载到内存,用完了就释放。

这个设计带来了两个直接好处:分析结果可以卸载到磁盘,只有真正需要时才加载进内存;保存的分析结果跨重启可复用,编辑器重启后不用重新索引。实测数据很能说明问题:M4 Max 机器上 Rust Glancer 基础索引 5 秒、全量索引 8 秒,而 rust-analyzer 分别是 6 秒和 13 秒——老机器 M1 8GB 上差距更明显,Glancer 是 6/9 秒,rust-analyzer 是 7/14 秒。

冻结分析当然有代价:从文件系统加载和反序列化比内存慢,按定义不如增量方案快。作者的缓解手段是:打字时不跑全量分析,只对当前函数体做浅层分析,复用之前的完整索引。这样补全响应速度足够快,但代价是新加入的 import、结构体、trait 要等保存文档后才会进入索引——作者说适应几天就没感觉了。

功能现状与架构细节

别被"内存小"误导,这不是个玩具。它已经具备完整的索引管线:类型推断、基于 Chalk 的 trait solver、大部分常规 Rust 语法支持,以及 goto definition、hover、inlay hints、补全等主流 LSP 动作。作者说它已经可以当日常主力工具用。

技术实现上有几个值得说的点:为了降低内存碎片化,作者对齐了分配生命周期;采用"引擎即子进程"(engine-as-a-subprocess)模型,同时解决内存碎片化和多 workspace 项目的问题;还有分片缓存(sharded cache)。开发过程中作者还搭了一套性能分析栈,能测量性能、内存(原生跟踪和 jemalloc),按需生成 profile,并在 CI 里跑基准对比 rust-analyzer。

项目重度使用 LLM 辅助开发,但作者强调不是 vibe coding:每个 PR 都人工验证,git 历史里能看到相隔数天的 1 万行级 diff——他几乎每天都在这项目上工作,用了 4 个月从"智能 ctags"一步步演进成真正的 LSP。作者的开发循环很有意思:自己先动手 → LLM 提方案看着合理就采纳 → 跑通后发现设计缺陷 → 想明白后拉着 LLM 一起修,大坑可能要修一周。

怎么用

安装很简单:直接在 VS Code 扩展市场搜 rust-glancer 安装,或者从 GitHub 仓库 构建 vsix 手动安装。它同样面向 agentic 工作流做了优化:大量编辑器外的改动(比如 Agent 改代码)不会触发快速重索引,自定义文件监视器也解决了 inlay hints 错位的问题。

适用人群与选型建议

作者自己很清醒:Rust Glancer 永远不会变成"比 rust-analyzer 更好但一样完整"的东西。在乎完整性和按键级准确度的项目,rust-analyzer 仍是默认选择;Rust Glancer 的定位是机器较弱的人(旧电脑、WSL、内存紧张的开发机),或者愿意用一点牺牲换大量内存的人。作者的目标平台包括 2020 年的 M1 MacBook Pro 8GB——这类机器上 rust-analyzer 基本是奢侈品,Glancer 则是可用的日常工具。

接下来作者计划做性能优化、索引期内存优化、类型推断改进、code actions(实现缺失的 trait 字段、自动 import),以及一个不执行代码的 proc macro 支持方案。build scripts 和依赖 proc macro 执行这类需要运行不可信代码的功能,短期内不会支持。

如果你在内存紧张的机器上写 Rust,装一个试试的成本很低;就算不换,这个项目展示的"冻结分析 + 磁盘卸载"思路,对理解 LSP 架构设计也是很好的参考。

分享到
微博Twitter

© 2026 四月

原文链接:https://www.aprilzz.com/tools/rust-glancer-lsp