Zpět na domů

Trigamové indexy Cursor pro rychlé regex-hledání

Cursor implementoval lokální trigramové indexy pro zrychlení regex-hledání v IDE. Technologie využívá sparse n-grams a mmap-soubory vázané na git-commit. Zrychlení až 100x ve velkých monorepo.

Cursor: trigramy a mmap pro okamžité hledání v IDE
Advertisement 728x90

# Lokální trigramové indexy Cursor urychlují regex-hledání v velkých repozitářích

V Cursoru zavádějí lokální indexy pro regex-hledání přímo v IDE. To řeší problém pomalého skenování velkých monorep, kde klasický ripgrep tráví 15+ sekund na volání, zatímco AI-agent generuje desítky takových požadavků.

Technologie je založena na trigramovém inverzním indexu z roku 1993. Text se rozkládá na všechny 3-znakové sekvence (trigramy), které slouží jako klíče ve slovníku. Každému klíči odpovídá seznam souborů obsahujících tuto sekvenci. Regex-dotaz se dekomponuje do sady trigramů, posting lists se protínají pro výběr kandidátů. Dále se grep aplikuje pouze na deset souborů místo tisíců.

Sparse n-grams pro přesné scopování

N atop základního indexu jsou přidány sparse n-gramy. Délka každého n-gramu se počítá deterministicky: prostřednictvím vah pár znaků na základě crc32 nebo frekvenční tabulky sestavené z terabajtů open-source kódu.

Google AdInline article slot

Při indexování se generují všechny možné n-gramy, při hledání minimální pokrývající množina. To snižuje počet lookupů a zvyšuje přesnost filtrování.

// Příklad dekompozice regex do n-gramů
regex: \w+@\w+\.com
n-grams: ['@', 'w+', '.c', 'com', ...]  // sparse pokrytí
candidates = intersect(postings(ngrams))

Lokální úložiště a vazba na commit

Index je uložen lokálně na stroji uživatele ve dvou mmap-souborech. Důvody:

  • AI-agent stejně čte soubory lokálně pro finální kontrolu.
  • Síťové roundtripy ničí zisk rychlosti.

Index je vázán na konkrétní git-commit. Nezakomittované změny se aplikují navrch bez přestavby.

Google AdInline article slot
  • Výhody mmap: nulový overhead na načtení, rychlá navigace v posting lists.
  • Aktualizace: spouští se na git pull/push nebo ruční rebuild.
  • Velikost: úměrná codebase, pro 10M LoC ~500MB.

Srovnání výkonu

| Přístup | Čas na požadavek (10k souborů) | Kandidáti pro grep |

|--------|--------------------------------|---------------------|

| ripgrep | 15–20 s | 10k |

Google AdInline article slot

| Cursor index | 50–200 ms | 10–50 |

V reálných scénářích s 100+ požadavky od agenta dosahuje celkové zrychlení 100x.

Trigramy zajišťují úplnost (recall=1 pro přesné podřetězce), sparse n-gramy přidávají přesnost bez falešných poplachů.

Co je důležité

  • Trigramový index snižuje kandidáty z tisíců na desítky souborů.
  • Sparse n-gramy minimalizují lookupy prostřednictvím minimální pokrývající množiny.
  • Lokální mmap-úložiště vylučuje síťové zpoždění.
  • Vazba na git-commit s overlayem nezakomittovaných změn.
  • Zrychlení regex-hledání 100x pro AI-agenty ve velkých monorep.

— Editorial Team

Advertisement 728x90

Číst dál