Re: А почему Intellisense однопоточный?
От: anastasiak2512  
Дата: 29.08.20 21:03
Оценка:
Добрый вечер,


VC>В CLion, например, нажимая CTRL-пробел в пустой строке или открывая скобку после имени функции жуткие тормоза. Это в маленьком проекте.

VC>Так же в Райдере в JSX-исходниках.

VC>Если есть такой тикет поделитесь ссылкой. Проголосую и почитаю.


Сначала сразу скажу, что в идеале было бы засабмитить пример в трекер, на котором это воспроизводится. Ну, или хотя бы CPU snapshot. Такие тормоза случаются (к сожалению) и зависят сильно от проекта (и даже не его размера, а сложности языковой). Пример будет очень полезен.

Почему это происходит и при чем тут однопоточность? Я не могу утверждать наверняка, не видя примера кода. Но чаще всего такое случается, когда платформенный action (в данном случае какое-нибудь форматирование или подсветка или что-то еще из typing assist) запрашивает у языкового движка нечто про код, что внезапно требует резолв кода. К сожалению, в отличие от Java или Python, в C++ резолв может потребоваться для всего чего угодно (даже покрасить код без него нельзя правильно). И получается, что action, который по расчетам платфорфмы должен был быть быстро выполнен в текущем потоке, вдруг затребовал чуть ли не репарс всего (редко совсем так плохо, но всякое бывает).

Что мы с этим делаем? Конечно, не смотрим на это спокойно и уже давно приоритезировали такие проблемы выше всего остального. Но фиксить их точечно невозможно — это требует скорее глобальной переделки архитектуры платорфмы. Или же (и именно такой пусть мы сейчас выбрали) переведения части action-ов на clangd-движок (с каждым релизом туда все больше штук переезжает), а то, что не возможно (потому что там нет индекса всего проекта) на какую-то lightweight модель кода. С последним пока сложно, потому что никак не найти золотой середины между "легко/быстро" и "правильно хотя бы почти всегда". Но мы в процессе.

Зачем же вам тогда мой пример кода? Ну например, потому что иногда случаются low-hanging fruits, которые можно как-то быстро все же убрать и без глобальных переделок.

Много написала. Надеюсь, стало понятнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.