Skip to content

docs(measure): четыре замера против sourcekit-lsp и Serena, и правка счёта файлов - #31

Open
RSafargalin wants to merge 1 commit into
mainfrom
measure/lsp-round-two
Open

RSafargalin wants to merge 1 commit into
mainfrom
measure/lsp-round-two

Conversation

@RSafargalin

Copy link
Copy Markdown
Owner

Четыре замера из списка, который мы составили после спайка, плюс дефект, который они нашли у нас.

1. Согласие на выборке — 100 %

Пятьдесят имён взяты из карты репозитория механически (отсортировать и проредить), заданы обоим инструментам на Alamofire 0455bfb. Сравнимых — 33, совпали все 33, ссылка в ссылку. Семнадцать пропущено: за этими именами у sextant больше одного символа, и сравнивать «какой из семи request» с одной позицией LSP значило бы подтасовать в свою пользу.

Перекос намеренно против нас: sourcekit-lsp спрашивался на позиции определения, которую даёт sextant. Агенту в жизни эту позицию ещё нужно найти.

2. Масштаб: swift-syntax, 758 файлов

sextant sourcekit-lsp
Подготовка swift build --build-tests 4 мин 09 с фоновая индексация 107 с
Диск 43 МБ 551 МБ
Во второй раз 1.27 с (сборке нечего делать) индексная сборка остаётся
Тёплый ответ ~2.4 с (процесс CLI) 0.02 с (живой сервер)
Ответ 2518 2518

Время сборки на наш счёт не пишется: разработчик делает её и так, индекс — побочный продукт. 551 МБ им не сэкономить: это вторая компиляция того же пакета ради одной индексации.

Ранний ответ LSP частичен и выглядит полным: 0 → 852 → 2337 → 2362 → 2366 → 2428 → 2518 за 107 секунд. Второй раз за два дня это едва не стало «фактом», поэтому пробник теперь опрашивает, пока число не перестанет меняться.

3. Байты на тот же ответ (2518 ссылок)

байт
sourcekit-lsp, сырой JSON 873 371
sextant --full --limit 3000 (все построчно) 114 589
sextant --json 359 655
sextant с группировкой (по умолчанию в пайп) 8 792

Построчно против построчно — 7.6×, потому что у LSP на каждую позицию повторяется абсолютный file:// URI и полный объект диапазона. Против ответа по умолчанию — 99×. Шага «найти позицию» в числах нет: моделировать путь агента цифрой значит его выдумать.

4. Цена инструментов до первого ответа

sextant — 13 инструментов, 6 353 байта определений; Serena — 21 инструмент, 26 215 байт. Вчетверо, и это не раздутость: Serena покупает этим символьное редактирование, память и онбординг, которых у нас нет намеренно.

Наш дефект, найденный замером

usages: 1000 of 2518 (internal cap) in 59 file(s) считало файлы по собранной тысяче, тогда как ссылки на символ трогают 116 файлов. Число было верным и читалось как другое. Теперь: in 59 file(s) of those shown.

Проверено

  • L4: все цифры выше сняты прогоном; корпуса — Alamofire 0455bfb и swift-syntax 60e8eb8, оба собраны с тестами.
  • L5: тест на новую формулировку (усечение → «of those shown», без усечения → молчит).
  • Три пробника лежат в docs/measurements/ со ссылками из таблицы; make ci зелёный.

Что из списка осталось

Кросс-язык на настоящем Objective-C репозитории, диагностики после правки, отказоустойчивость (сломанная сборка, макросы, #if, отсутствующий тулчейн) и сквозной прогон на задачах.

🤖 Generated with Claude Code

…счёта файлов

Согласие на выборке: пятьдесят имён из карты репозитория, тридцать три
сравнимых, все тридцать три совпали ссылка в ссылку. Позицию LSP получал даром —
перекос намеренно против нас.

Масштаб на swift-syntax: их индекс 551 МБ против наших 43 МБ, и это вторая
компиляция того же пакета ради одной индексации; наша сборка — то, что
разработчик делает и так, повторная занимает 1.27 с. Ответ у обоих 2518, но их
устаканивается 107 секунд через шесть промежуточных чисел, каждое из которых
выглядит законченным.

Байты на тот же ответ: 873 371 у них, 114 589 у нас построчно, 8 792 с
группировкой. Определения инструментов: 6 353 байта против 26 215 у Serena.

Замер нашёл и наш дефект: «in 59 file(s)» рядом с усечённым счётом считалось по
собранной тысяче, тогда как весь набор трогает 116 файлов. Теперь сказано «of
those shown».

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant