Hatred's Log Place

DON'T PANIC!

Feb 12, 2022 - 2 minute read - Programming

Qt Creator 7: clangd

Тут обновлял свой CMakeProjectManager2 и краем глаза заметил добавление файла dist/changes-7.0.0.md. Решил перечитать (с некоторыми изменениями я сталкиваюсь регулярно, так как живу на master-ветке).

Там фигурирует:

### C++  
  
* Switched to Clangd by default (QTCREATORBUG-22917)

И таки да, они переключились на кодовую модель от Clangd. Оно появилось ещё раньше, где-то к версии 6.0, но была выключена. Можно ознакомиться с анонсом из первоисточника: Qt Creator and clangd: An Introduction. Или почитать комментарии к соответствующей новости на Phoronix.

В частности, они там объясняют причины. Основная (как мне кажется): libclang больше активно не развивается и для полноценной навигации, рефакторинга и прочего приходится держать две модели.

Там же они рекомендуют использовать самую последнюю версию clangd. Так что ссылки ниже ваши други:

Ну а теперь мои личные впечатления… Точнее табличка, которую я для себя составил. Плюсы и минусы.

Плюсы Минусы
Как мне показалось, лучше парсит, более точно видит использование символа Парсит долго. Нет, не так. ОЧЕНЬ ДОЛГО!
База постоянная, т.е. сохраняется между запусками и инкрементно обновляется Пока парсит, отъедает много памяти. Потом немного возвращает.
Если отстреливается (например по нехватке памяти от earlyoom или nohang),
то перезапускается только два раза, потом нужно перезапускать IDE или
перегружать проект
В итоге жрёт памяти примерно в два раза больше, чем без него. Это следствие того,
что по факту, оба парсера сейчас работают в параллель, дополняя друг друга.
И самое гнусное: постоянные подвисания редактора кода при вводе. Это очень
сильно раздражает.

В сухом остатке, если бы не последний пункт недостатков, то с его работой можно было бы мириться.

По памяти тоже минус. Но для больших проектов (у меня ядро Linux 4.19-Xilinx из комплекта PetaLinux 2019.2 через Generic Project подключено) его можно отключить (пока):

  • В данный момент можно выключить Clangd глобально и включать только для отдельных проектов в их настройках.
  • Или включить глобально и выключать для отдельных проектов.

В любом случае, считаю, что переключаться на него, как на дефолтный парсер явно преждевременно. И особенно преждевременно заявлять о полном переходе на него. Хотя причины такого понятны: получить больше фидбека. Но лаги при вводе… это же вообще ставит крест на юзабилити.

PS это напомнило на возникающие лаги, при работе в Emacs при подключении Language Server или даже ещё раньше, всяких автокомплитеров и т.п.