RAM идэгч LSP-д баяртай гэж хэлье: "Rust Glancer" санах ойн хэрэглээг 100 дахин бууруулж танилцуулагдлаа
Rust хэлээр төсөл хөгжүүлж үзсэн ямар ч инженер нэг нийтлэг асуудалтай тулгардаг: код бичиж байх явцад IDE-ийн арын талд ажиллах rust-analyzer хэдхэн минутын дотор 4–8GB, том хэмжээний монорепод бүр түүнээс ч их RAM "залгичихдаг". Хэрэв та 8GB–16GB санах ойтой зөөврийн компьютер, WSL (Windows Subsystem for Linux), эсвэл нөөцийн хатуу хязгаартай DevContainer / cloud орчинд ажилладаг бол энэ нь хөгжүүлэлтийн бүтээмжийг шууд унагадаг хүчин зүйл болдог билээ.
Тэгвэл энэ асуудлыг цоо шинэ архитектурын шийдлээр шийдсэн Rust Glancer төсөл нээлттэй танилцуулагдаж, технологийн нийгэмлэг болон Hacker News дээр хүчтэй шуугиан тарьж байна.
Асуудал хаана байв: rust-analyzer яагаад тийм их RAM иддэг вэ?
Одоогийн албан ёсны стандартын түвшинд ашиглагдаж буй rust-analyzer нь Salsa хэмээх incremental query-based архитектур дээр суурилдаг. Salsa-ийн үндсэн зорилго нь товчлуур дарах бүрт (keystroke-level) кодыг хормын төдийд дахин боловсруулж, өөрчлөлтийг хурдан харуулах явдал юм.
Гэвч энэ хурдны төлөө төлж буй төлбөр нь санах ой:
- Төслийн бүх AST (Abstract Syntax Tree), төрөл тодорхойлолт (type inference), модуль бүтцийг бүхэлд нь RAM дээр хадгалдаг.
- Таны кодонд дуудагдсан олон мянган crate хамаарлуудын (external dependencies) мэдээллийг хэзээ ч үзэж шалгахгүй байсан ч санах ойд байнгын бэлэн байдалд байлгадаг.
rowanзэрэг синтакс сангууд нь санах ойн фракментаци (memory fragmentation) үүсгэж, процессын RAM хэрэглээг тасралтгүй өсгөдөг.
"Rust Glancer" хэрхэн ажилладаг вэ?
Хөгжүүлэгч popzxc-ийн 4 сарын турш хөгжүүлсэн Rust Glancer нь уг асуудлыг санах ойд төвлөрсөн "амьд кэш"-ээс татгалзаж, "Frozen Workspace Analysis" зарчмаар шийджээ.
[Уламжлалт rust-analyzer]
Бүх Dependencies + Workspace AST ──> [ БҮГДИЙГ RAM ДЭЭР БАЙНГА БАРИХ ] (3–8 GB RAM)
[Rust Glancer Архитектур]
Index Workspace нэг удаа ──> [ Filesystem / Disk руу цуваалан хадгалах ]
IDE Query хийх үед ──> [ Зөвхөн шаардлагатай хэсгийг RAM-д ачаалах ] (<100 MB RAM)
Гол давуу талууд болон техникийн өөрчлөлтүүд:
- Санах ойн хязгаар <100MB: Энгийн болон дунд хэмжээний төслүүд дээр LSP-ийн ашиглах санах ойн хэмжээг 100MB дотор барьж чадсан нь уламжлалт хэрэглээнээс бараг 100 дахин бага үзүүлэлт юм.
- Файлын системд кэшлэх (Disk Offloading): Индекслэсэн үр дүнгээ диск дээр хадгалдаг тул IDE эсвэл засварлагчаа хааж нээхэд төслийг дахиж 0-ээс эхлэн индекслэх шаардлагагүй (Instant Restart) болсон.
- Хөнгөн синтакс мод:
rowan-аас татгалзаж, санах ойн хуваарилалтыг оновчилсон "frozen CST" (Concrete Syntax Tree) бүтэц рүү шилжүүлснээр санах ойн алдагдлыг зогсоосон. - Үндсэн боломжууд бүрэн: Хэдийгээр эхний шатандаа байгаа ч Chalk суурьтай trait solver, type inference, Goto Definition, Hover, Auto-completion, Inlay Hints зэрэг LSP-ийн суурь функцууд бүрэн ажиллаж байна.
rust-analyzer-ийг бүтээгч юу гэж үзэв?
Энэхүү төсөл гарсны дараа rust-analyzer-ийн анхны архитектурыг бүтээсэн Алексей Кладов (matklad) өөрийн блогтоо Rust Glancer-ийн хандлагыг онцгойлон магтжээ.
Түүний үзэж буйгаар, орчин үеийн хөгжүүлэлтийн хэрэгслүүд хэрэглэгчийн нээж ч үзээгүй олон мянган хамаарал сангуудыг санах ойд чихэж хадгалах нь буруу бөгөөд Java/IntelliJ ертөнцөд .class байткодоос хэрэгцээтэй үед нь хөрвүүлж уншдаг шиг ухаалаг, "хөлдөөсөн" архитектур руу шилжих нь зөв зам гэдгийг онцолсон байна.
Сул тал ба Хувилбарын сонголт (Trade-offs)
Инженерчлэлд "үнэгүй бяслаг" байдаггүй:
- Шуурхай байдал: Хэрэв та кодоо сануулаагүй (unsaved buffer) бичиж байх үед шинэ trait эсвэл import нэмбэл файлоо
saveхийх хүртэл бүтэн индекс шинэчлэгдэхгүй. Зөвхөн идэвхтэй байгаа функцийн бие доторх өөрчлөлтөд shallow analysis хийдэг. - Хөгжүүлэлтийн шат: Зарим нарийн макро болон төвөгтэй метапрограммчлалын дүрэм хараахан гүйцэд дэмжигдээгүй байгаа аж.
Хөгжүүлэгчдэд ямар ач холбогдолтой вэ?
Хэрэв та хүчирхэг 64GB RAM-тай workstation дээр ажилладаг бөгөөд агшин зуурын micro-latency чухал бол rust-analyzer хамгийн шилдэг сонголт хэвээр байх болно.
Харин та:
- Хуучин болон бага үзүүлэлттэй зөөврийн компьютер ашигладаг,
- Нөөцийн хязгаартай Remote SSH, Docker контейнер, CI/CD орчинд ажилладаг,
- Нэг дор хэд хэдэн Rust төсөл зэрэг нээж ажиллах шаардлагатай бол Rust Glancer нь хөгжүүлэгчийн туршлагыг (DevEx) огцом өөрчлөх хүчирхэг шийдэл болж гарч ирлээ. Төслийн VS Code өргөтгөл болон эх код одоогоор нээлттэй туршигдаж байна.
Эх сурвалж: Hacker News / Rust Glancer Blog (rust-glancer.github.io), matklad.github.io
Сэтгэгдэл
Ачаалж байна...