RAM "мангас" rust-analyzer-ийн эсрэг: Санах ойг 100 дахин хэмнэх шинэ "Rust Glancer" LSP танилцуулагдлаа
Санах ойн "мангас" ба Rust хөгжүүлэгчдийн өвдөлт
Rust хэлээр төсөл хөгжүүлдэг ямар ч инженер нэг л зүйлийг сайн мэднэ: хэдхэн том crate эсвэл хамаарал (dependency) төсөлдөө нэммэгц IDE-ийн ард ажилладаг албан ёсны хэлний сервер болох rust-analyzer шууд л 2GB-аас 8GB+ хүртэлх RAM залгиж эхэлдэг.
Хэрэв та 8GB RAM-тай зөөврийн компьютер, WSL (Windows Subsystem for Linux), эсвэл үүлэн серверийн хязгаарлагдмал орчинд ажилладаг бол Браузер, Slack, IDE-гээ зэрэг нээхэд л төхөөрөмж гацаж, код бичих явц там болж хувирдаг билээ.
Энэхүү асуудлыг шийдэхээр сүүлийн 4 сарын турш нууцаар хөгжүүлэгдсэн Rust Glancer төсөл олон нийтэд танилцуулагдаж, Hacker News болон олон улсын инженерийн нийгэмлэгүүдийн анхаарлын төвд орлоо. Санах ойн хэрэглээг ердөө 100MB-аас бага түвшинд тогтоон барьж чадсан энэхүү төслийг rust-analyzer-ийг анх үндэслэсэн Алексей Кладов (matklad) хүртэл онцгойлон сайшааж, архитектурын сонирхолтой шийдлийг нь задлан бичжээ.
rust-analyzer яагаад тийм их RAM хэрэглэдэг вэ?
Өнөөдөр бүх нийтийн стандарт болсон rust-analyzer нь дараах хоёр гол тулгуурт суурилдаг:
- Salsa query engine: Төслийн бүх төрөл (types), функц, макрог агшин зуур тооцоолох зориулалттай санах ойд (RAM) суурилсан кэш систем.
- Rowan CST (Concrete Syntax Tree): Хэрэглэгчийн товчлуур дарах бүрд бүтэн кодын модыг санах ойд хадгалж, алдаатай эсвэл дутуу бичсэн кодод ч автоматаар suggestion гаргадаг уян хатан мод бүтэц.
Энэхүү бүтэц нь маш хурдан бөгөөд интерактив боловч бүх мэдээллийг байнгын санах ойд (RAM-resident) хадгалахыг шаарддаг. Төсөл томорч, Cargo.lock файлд 1000 давсан package орж ирэхэд эдгээрийн бүх AST модыг RAM дотор байнга авч явах нь асар их "санах ойн татвар" ногдуулдаг байна.
"Rust Glancer" үүнийг хэрхэн 100MB-аас бага болгов?
rust-analyzer-ийн шууд хуулбар хийхийн оронд Rust Glancer-ийг хөгжүүлэгч цоо шинэ концепц сонгосон байна:
1. "Хөлдөөсөн дүн шинжилгээ" (Frozen Workspace) ба Диск рүү шилжүүлэх
Rust Glancer төслийн бүх хамаарлууд болон кодыг нэг удаа бүрэн индекслээд (Full indexing), үр дүнг нь RAM-д үлдээхгүйгээр файлын систем (диск) рүү цуваажуулан хадгалдаг.
IDE-ээс ямар нэг үйлдэл хийхэд (жишээ нь, Goto Definition эсвэл функцийн төрлийг харах үед) зөвхөн тухайн шаардлагатай жижиг өгөгдлийг дискнээс түр хугацаанд уншиж харуулаад, шууд сулладаг. Хэрэглэгч кодоо бичихгүй браузер луугаа шилжих үед ч Glancer ямар ч RAM ашиглахгүй хэвээр үлддэг байна.
2. Шууд дахин эхлэх боломж (Instant Restart)
Одоогийн LSP-үүдийн хамгийн яршигтай тал нь IDE-г хаагаад нээхэд төслийг дахин эхнээс нь индекслэж хэдэн минут хүлээн суух явдал байдаг. Rust Glancer өмнөх үр дүнгээ диск дээр хадгалсан тул IDE-г дахин нээх үед хүлээх шаардлагагүй шууд ажиллаж эхэлнэ.
Архитектурын төлөөс (Trade-offs) юу вэ?
Мэдээж үнэ төлбөргүй ид шид гэж үгүй. Санах ойг 100 дахин бууруулахын тулд төслийн зохиогч зарим буулт хийжээ:
- Хадгалалт хийх шаардлага (Save to re-index): Шинээр
useоруулж ирэх эсвэл шинэ бүтэц нэмэхэд тухайн файлыг хадгалах (Ctrl+S) хүртэл дээд түвшний индекслэлт бүрэн шинэчлэгдэхгүй. Гэхдээ одоо засварлаж буй функц доторх хувьсагчид болон локал completions хэвийн ажиллана. - Proc macro болон build script: Нарийн төвөгтэй procedural macro болон custom build скриптүүдийг шууд ажиллуулахад хязгаарлалттай.
matklad (Aleksey Kladov)-ийн дүгнэлт
rust-analyzer-ийг анх бүтээсэн нэрт инженерийн нийтлэл энэхүү шинэ төслийг улам сонирхолтой болголоо. Тэрээр:
"rust-analyzer-т бид Rowan AST-ийг ашигладаг. Гэвч хөгжүүлэгчийн бодит кодын 99% нь хэзээ ч гар хүрч засахгүй олон мянган dependencies байдаг. Тэднийг бүгдийг нь уян хатан, нарийн төвөгтэй бүтцээр RAM дотор хадгалах нь хэт нүсэр байсан байж болох юм. Glancer-ийн санал болгож буй дискэнд суурилсан 'lazy' арга барил бол маш зөв чиглэл" гэж онцолжээ.
Хөгжүүлэгчдэд ямар ашигтай вэ?
Одоогоор Rust Glancer нь бүрэн дууссан бэлэн бүтээгдэхүүн биш ч Type Inference, Trait Solver (Chalk), Go to Definition, Auto-completion, Inlay Hints зэрэг өдөр тутам хэрэг болдог 90% үндсэн боломжуудыг агуулж байна.
Хэрэв та бага хүчин чадалтай төхөөрөмж дээр ажилладаг, эсвэл төслийнхөө олон микросервисийг зэрэг нээж санах ойн хомсдолд ордог бол VS Code дээр Rust Glancer өргөтгөлийг туршиж үзэх боломжтой. Энэ нь зөвхөн Rust хэл төдийгүй ирээдүйн бусад хэлний хэрэгслүүд санах ойг хэрхэн зохицуулах ёстой вэ гэдэг шинэ гарцыг харуулж байна.
Эх сурвалж: Rust Glancer Blog & Documentation, Aleksey Kladov (matklad) - Rust Glancer Review, Hacker News
Сэтгэгдэл
Ачаалж байна...