+38/050/370-3627
+38/093/220-0872
+38/044/257-2444
Новини

JetBrains CLion 2019.3 - реліз кросплатформового середовища розробки для C та C++

JetBrains CLion 2019.3 - реліз кросплатформового середовища розробки для C та C++

JetBrains CLion 2019.3 - Що нового?

Основною метою цього релізу була якість. JetBrains вирішив сфокусуватися на проблемах, які давно турбують користувачів, — в першу чергу, продуктивність та чуйність редактора, а в другу — баги, недоробки та дуже затребувані, але відсутні можливості.

Для початку, коротко про саме головному у релізі JetBrains CLion 2019.3:

  • Покращення швидкодії та чуйності редактора, в першу чергу автодоповнення, реалізоване в нашому движку на базі Clangd.
  • Ninja-генератор у CMake, налаштування CMake за умовчанням та інші покращення проектної моделі.
  • Оновлення в інтеграції з налагоджувачами.
  • Нова дія для перемикання між заголовковими та сорс-файлами.
  • Більше точний аналіз коду: нова перевірка для віртуальних функцій, а також перевірка правопису в CMake та коментарях Doxygen.
  • Підтримка концептів із стандарту C++20.
  • Метрики покриття коду.
  • WSL2, правила форматування та іменування від Microsoft, оновлення VCS підтримки та багато іншого.

Доступна безкоштовна пробна версія JetBrains CLion 2019.3 на 30 днів.

Швидкодія редактора

Судячи зі статистики, яку погоджуються надсилати багато користувачів JetBrains, найчастіше використовувана дія в CLion — це автодоповнення. Саме на ньому JetBrains вирішив зосередити увагу в цьому релізі, щоб зробити його більш чуйним. Для цього JetBrains додав до вже наявних в IDE «постачальників» автодоповнення ще один, на базі Clangd. Суть у тому, що всі постачальники працюють паралельно, і як тільки готові перші результати, CLion показує список варіантів, що розкривається, продовжуючи при необхідності підвантажувати інші варіанти.

Звичайно, JetBrains захотів зрозуміти, чи дає переваги такий гібридний підхід. Виміри показали, що у простих проектах швидкість власного постачальника CLion і постачальника з урахуванням Clangd відрізняються не сильно. А ось на складних проектах, таких як LLVM, Qt, Boost, Eigen, перші сто результатів від Clangd з'являються значно швидше.

Докладніше про виміри — в окремій статті в англомовному блозі CLion. Серед інших значних поліпшень варто відзначити платформне прискорення часу запуску IDE. Вона досягнута за рахунок паралелізації багатьох процесів на старті, реорганізації класів, що завантажуються на старті, оптимізації завантаження шрифтів на macOS. Конкретні числа для прискорення залежать від налаштувань оточення, машини, платформи та інших факторів.

У CLion, на превеликий жаль, досі зустрічаються підвисання інтерфейсу користувача. JetBrains намагається згрупувати їх за вихідною проблемою і виправляти одну проблему за іншою. Так, у цьому релізі JetBrains виправив підвисання у випадках відкритого вікна використання (Usages View), при переході на декларацію, при перейменуванні директиви #include, при використанні «хлібних крихт» і safe delete, а також в інших випадках. Підвисання інтерфейсу користувача залишаються найактуальнішою для JetBrains проблемою, так що цю роботу JetBrains обов'язково продовжить і в наступних релізах.

Ну і, нарешті, прискорення рефакторингу Rename. Цей рефакторинг вміє перейменовувати як використання імені у коді, а й у рядкових літералах і коментарях. Але не завжди це потрібно, а пошук імені раніше здійснювався до того, як користувач IDE вкаже, які саме використання хотілося б перейменувати. Це призводило до великих затримок під час пошуку популярного імені. Тепер можна спочатку вибрати пошук тільки за кодом, а вже потім запустити сам пошук. Для цього у налаштуваннях Settings/Preferences | Editor | General | Refactorings треба відключити “Enable in-place mode”. У цьому випадку при виклику рефакторингу (Shift+F6 по дефолту на Windows/Linux, ⇧F6 на macOS), CLion спочатку відразу відкриє діалог Rename, в якому можна вказати параметри пошуку

Поліпшення проектної моделі CMake

Тут багато хто з вас напевно чекав на анонс підтримки Makefiles. Але поки що доступний тільки напівавтоматичний підхід до їх інтеграції через compilation database. Більш нативна підтримка, як і раніше, у розробці, але в цьому релізному циклі JetBrains сильно просунулися вперед і має всі шанси показати нову підтримку до наступного релізу 2020.1, десь наприкінці березня 2020 року. в тому числі такий очікуваний користувачами генератор Ninja! Раніше ми використовували Makefiles і схожі на нього генератори, тому що парсили результуючі файли (якщо точніше, це були -G “CodeBlocks – Unix Makefiles”, а на Windows-G "CodeBlocks – MinGW Makefiles " і -G "CodeBlocks – NMake Makefiles"). Тепер можна вказати будь-який генератор у профілі CMake в CLion

Це можливо тільки при використанні CMake версії 3.15 і вище, тому що реалізовано через CMake File API, і працює на всіх платформах, у віддаленому режимі, для WSL/WSL2.

Такі генератори як Xcode і Visual Studio є мульти-генераторами, тобто генерують файли для всіх типів збірок (Debug, Release тощо), але CLion для індексування та складання буде використовувати тільки той тип збірки, який вказаний у профілі CMake.

У цьому релізі також з'явилися налаштування CMake за замовчуванням. Це означає, що для всіх нових проектів у CLion можна використовувати одні заздалегідь задані налаштування, такі як генератор CMake або директорія для генерації CMake. Налаштування можна вказати у File | Інші налаштування | Settings for New Projects…

З важливих покращень проектної моделі CMake ще варто вказати можливість перезавантажувати валідні конфігурації, навіть якщо в проекті є інші невалідні. Це може бути корисним, якщо у вас налаштовано кілька віддалених конфігурацій, які на даний момент недоступні, але хочеться перезавантажити хоча б локальні конфігурації.

Оновлення інтеграції з налагоджувачами

У відладчиках JetBrains вирішили полагодити ті проблеми та недоробки, які турбують наших користувачів найбільше. По-перше, CLion тепер читає .gdbinit/.lldbinit з директорії проекту. Це корисно, якщо хочеться якісь налаштування відладчика кастомізувати чи додати pretty printers, але лише для конкретного проекту. Раніше доводилося ці налаштування вказувати в конфігураційних файлах відладчика в директорії користувача. Тепер можна налаштувати ці параметри спеціально для проекту. Але, щоб це запрацювало, треба дозволити таку поведінку в самому відладчику в налаштуваннях на рівні директорії користувача.

Інтеграція з LLDB доступна на Linux і macOS. У новому релізі JetBrains проадейтили вбудований LLDB до версії 9.0, а заразом глобально переглянули усі вбудовані pretty printers. Завдяки цьому суттєво покращилося представлення стандартних контейнерів на обох платформах. Детальні порівняльні таблички можна переглянути в англомовному блозі JetBrains. Варто відзначити, що на платформі macOS, бібліотека libc++ обробляється набагато краще, ніж libstdcxx. У CLion зараз існує кілька видалень роботи з проектом і налагодження. Від повністю віддаленого варіанта, коли і складання, і налагодження проекту відбуваються на віддаленій машині, до варіантів, коли віддалено відбувається лише налагодження проекту. Ось саме для другого випадку JetBrains додали ще одну конфігурацію в CLion - Remote GDB Server. На відміну від наявної вже давноGDB Remote Debug, у новій конфігурації CLion сам збирає проект (можливо, при цьому вам треба налаштувати параметри крос-компіляції), завантажує виконуваний файл на віддалену машину і запускає вашу програму під вказаним gdbserver. Стара конфігурація більше тепер підходить для складних варіантів, коли код на одній машині, збирання на другій, а налагодження на третій. Або якщо неможлива крос-компіляція.

Go to Header/Source files

Так, це сталося! JetBrains нарешті додали окрему дію для перемикання між заголовковими та сорс-файлами. У чому ж головна відмінність від старого платформного Go to Related Symbol? Справа в тому, що, будучи спільною платформною дією, Go to Related Symbol намагається бути дуже точним і підібрати один найвірніший варіант. Це і довго, і не завжди вірно у випадку C++. Нова дія Go to Header/Source поводиться інакше:

  • Якщо за 500 мс не знаходиться один єдино вірний варіант, то з'являється список відповідних варіантів, з яких користувач може вибрати найбільш підходящий.
  • Якщо користувач вже переходив з цього файлу, файл, куди він переходив, буде вгорі списку.
  • Далі в списку будуть файли з цієї ж директорії з іменем, що збігається.
  • І потім уже будуть йти результати пошуку порівняння декларацій та дефініцій.


Варто відзначити особливість пошуку (оскільки з нею вже зустрічалися наші користувачі) — пошук зараз ведеться за безпосередньо включеними/включаючими файлами. Це тимчасове обмеження, яке необхідно, щоб не плутати символи з однаковими іменами з різних націлів.

Аналіз коду

У аналізаторі коду в CLion з'явилася нова перевірка. Вона відловлює ситуації, коли віртуальні функції викликаються з конструкторів чи деструкторів. Чому це погано, вже багато де обговорювалося. Тепер і CLion попереджає про такі випадки:

Spell Checker — невід'ємний компонент інтегрованого середовища розробки. Усі ми робимо помилки у правописі, а потім нашим колегам важко читати код та коментарі. Тому добре, коли IDE підсвічує такі помилки. У цьому релізі JetBrains включили перевірку правопису у файлах CMake і коментарях документації формату Doxygen

Менше помилок правопису — код, що більш читається!

Концепти з C++20

Команда JetBrains вкладає зараз великі зусилля в мовний двигун на основі Clangd. А світова спільнота C++ активно розвиває Clang. У цьому релізі JetBrains об'єднали зусилля - взяли експериментальну гілку Clang з підтримкою концептів з C++20, яку розвиває Saar Raz, і влили її в нашу гілку Clangd. Таким чином, JetBrains отримали підсвічування коду з концептами і базові перевірки аналізатора Clang в CLion

Але на цьому JetBrains не зупинилися. І в движку на базі Clangd JetBrains реалізували деякі корисні випадки автодоповнення, перевірку на використання концепту, рефакторинг Rename для концептів, дії навігації та пошуку Go to Definition і Find Usages .

Автодоповнення для параметрів шаблону, на які накладено обмеження

Автодоповнення для std::is_same and < code>same_as:

Докладніше про спільну роботу над концептами можна почитати в англомовному блозі JetBrains. Там же є відео-запис доповіді з CppCon 2019, в якій Saar Raz презентував свою реалізацію концептів у Clang та нашу спільну роботу з підтримці концептів у CLion.

Метрики покриття коду

Code coverage — можливість, на яку дуже чекали і просили користувачі CLion. У минулому релізі роботу в цьому напрямку почала команда AppCode, а в цьому JetBrains підхопили її для випадків крос-платформного C++ вже в CLion. Працюють метрики покриття коду в CLion через інтеграцію з інструментами llvm-cov/gcov . При цьому можна запускати як юніт-тести, так і звичайні конфігурації, і за їх виконанням підраховуватиметься частота виконання тих чи інших рядків коду. Результати за кількома запусками можна за бажання підсумовувати в один загальний.

Безпосередньо результати можна побачити або у спеціальному вікні Coverage

…або у лівому гаттері в редакторі.
< br />Ну, і найголовніше: щоб це все запрацювало, потрібно передати спеціальні параметри компіляції:

  • Для GCC: -fprofile-arcs -ftest-coverage або --coverage.
  • Для Clang: або такі ж прапори, як у випадку з GCC, або-fprofile-instr-generate -fcoverage-mapping. Відмінності будуть лише у способі збирання метрик покриття.

Чому CLion не передає ці параметри? В основному, тому, що у JetBrains є правило не втручатися в процес компіляції. Та й не завжди зрозуміло, куди передавати ці параметри у разі не CMake. Але зараз JetBrains думає над варіантами того, як все ж такі випадки в майбутньому автоматизувати (аналогічна проблема у JetBrains є і з санітайзерами). -хелпе JetBrains.

Інші покращення

Серед інших важливих покращень у цьому релізі:

  • Підтримка підсистеми WSL2. Налаштування в CLion мають такі самі, як у WSL першої версії.
  • Підтримка правил форматування та іменування від Microsoft. Цей стиль доступний нарівні з Google, LLVM, Qt, GNU, Stroustrup та іншими Settings/Preferences | Editor | Code Style | C/C++.
  • Оновлення плагіна IntelliJ Rust (цім змін присвячений детальний пост в англомовному блозі JetBrains).
  • Оновлення підтримки VCS, інтерфейсу користувача та інші зміни з платформи IntelliJ.

Інші новини

Найкраща ціна