概要
- 4ヶ月間開発した Rust Glancer は、低メモリ消費を重視した Rust LSP の新実装
- 100MB未満のメモリ使用 と 即時インデックス復元 が主な特徴
- 古いPCやメモリ制限のある環境向けに設計
- rust-analyzerとの違いや設計思想、実装の工夫を詳述
- 現状の課題や今後のロードマップも公開
Rust Glancer: 低メモリ志向Rust LSPの紹介
- 4ヶ月間で開発した Rust Glancer、低メモリ消費を最優先に設計
- 100MB未満 のRAMで動作可能な設計、実際の計測値も公開
- エディタ再起動後も再インデックス不要、作業効率向上
- 古いMacBook Pro M1 (8GB RAM) でも快適に動作確認済み
- VS Code拡張機能 としてすぐに導入・試用可能
主な機能
- フルインデックスパイプライン、型推論・trait解決(Chalk)対応
- 一般的なRust構文とLSPアクション(定義ジャンプ、ホバー、インレイヒント、補完など)をサポート
- インデックス結果をファイルシステムに保存、必要時のみ読み込み
- シャロー解析 による高速補完、保存時のみフルインデックス更新
- エージェントによるコード変更 にも最適化、カスタムファイルウォッチャー実装
ベンチマーク結果
- MacBook Pro M4 Max(36GB)
- Rust Glancer: インデックス5秒/フル8秒
- rust-analyzer: インデックス6秒/フル13秒
- MacBook Pro M1(8GB)
- Rust Glancer: インデックス6秒/フル9秒
- rust-analyzer: インデックス7秒/フル14秒
Rust Glancerとrust-analyzerの違い
- rust-analyzer は salsa (インクリメンタルDB)と rowan (構文木)を採用
- 高速だが、メモリ消費と断片化が大きい
- Rust Glancer は インクリメンタル性を捨てて分析結果をファイル保存
- メモリ消費を抑え、再利用性を重視
- 保存時のみフル解析、入力中は部分的な解析で応答
- デメリット :新しい構造体やimportは保存まで補完候補に反映されない
- メリット :低スペックPCや大量プロジェクト同時編集に最適
開発の動機と経緯
- 7年以上のRust経験、rust-analyzerやrustcなどにも貢献経験あり
- rust-analyzerのメモリ消費と初期インデックス速度 に課題を感じていた
- 自身のワークフロー(複数IDE同時起動)で 16GB以上消費 する問題
- 「 スマートctags for Rust」から始まり、徐々に本格的なLSPへ進化
- 型推論・trait解決・マクロ展開 などの実装過程で多くの学びと発見
- Chalk統合 によるtrait解決の効率化
- プロファイリング基盤 を自作し、性能・メモリ計測とベンチマークを自動化
LLM(大規模言語モデル)の活用
- 開発初期からLLMを積極活用、設計や実装の参考に
- PR単位でコード品質を確認しつつ進行
- コードベースに 詳細なコメント を付与し、可読性・保守性を重視
- LLMの提案を受けつつも、最終的な設計判断は自分で行うスタイル
- 学習・成長の過程 としてLLMを活用
今後の課題・ロードマップ
- 未実装機能や既知バグ が多数存在
- 補完精度・LSPアクションの充実 が今後の課題
- ドキュメント充実 や、より詳細なプロファイリング情報の公開を予定
- rust-analyzerの完全な置き換えは目指さず、用途特化型LSPとして進化予定
導入方法・試用案内
- VS Code拡張機能 をインストール、またはリポジトリからvsixビルド
- 詳細は プロジェクトドキュメント 参照
Rust Glancerは、「 低メモリ消費で十分なRust LSP体験」を求めるユーザーに最適な選択肢。 高機能・高精度を求める場合はrust-analyzer、 メモリ効率や軽快さを求める場合はRust Glancerという棲み分けを想定。