Реліз CLion 2017.3: покращення підтримки C++, інтеграція з Valgrind Memcheck та Boost.Test
Основні покращення CLion 2017.3:
- Підтримка мови C++
- Поліпшення в таких підсистемах парсера, як list initialization та name lookup
- Підтримка специфічних розширень для компілятора Microsoft Visual C++
- Підтримка макросу __COUNTER__
- Нові інструменти та фреймворки
- Valgrind Memcheck
- Boost.Test
- CMake 3.9, GDB 8.0, LLDB 5.0
- Суттєві переробки та розширення можливостей у налаштуванні компілятора, оточення, CMake, відладчика та ін.
- Можливість запуску майже довільної функції main, іконки для запуску функцій main та тестів
- Можливість розробляти на Kotlin/Native у CLion
Можна прямо зараз завантажити безкоштовну 30-денну версію та спробувати нові можливості.
Підтримка мови C++
Глобальні покращення
Версія CLion 2017.3 торкнулася list initialization та name lookup.
У разі list initialization, виправлення, в в основному, призвели до того, що CLion більше не показує некоректні попередження на кшталт too many arguments, too few arguments, “no matching constructor” em>. І, навпаки, показує їх тепер там, де це потрібно До того ж, CLion тепер вміє коректно розуміти змінні у разі uniform initialization: Інша область виправлень у цьому релізі - name lookup. Правильне асоціювання імені змінної із її декларацією – одне з базових завдань мовної підтримки. Проблеми на цьому етапі призводять до неправильних повідомлень аналізатора коду, некоректної кодогенерації і т.д. були пов'язані з правильним порядком резолва та з резолвом змінних, які передаються в область видимості через конструкцію using
або за допомогою успадкування типів
Підтримка розширень MSVC
Якщо у вас на машині встановлено Microsoft Visual C++ компілятор, ви можете включити експериментальну підтримку MSVC в CLion і використовувати цей компілятор замість GCC і Clang. Експериментальна підтримка була названа з кількох причин:
- Спочатку CLion не підтримував ніяких спеціальних розширень MSVC мови C++
- У разі MSVC у CLion не доступний налагоджувач
CLion 2017.3 включає виправлення для першого пункту. Підтримані такі розширення, як __uuidof
, __unaligned
/__alignof
, __ptr32
/64
та інші. Повний список доступний у нашому блозі.
До на жаль, на налагоджувач для MSVC жодних конкретних планів поки що немає (зате є цікава дискусія на тему різноманітних налагоджувачів для MSVC та ліцензій на них).
Інші корисні покращення в підтримці C++
Команда, яка займається саме мовною підтримкою у CLion, зростає! І тому ми поступово покриваємо дедалі більше значних запитів із трекера. У цей реліз встигли зробити ще:
- Підтримка макросу __COUNTER__. Його значення тепер чесно обчислюється, а отже, CLion більше не покаже, наприклад, некоректне попередження
>duplicate declaration. А у Quick Documentation вікні (Ctrl+Q на Linux/Windows, F1 на macOS) можна побачити результат макро-підстановки: - Генерація визначень (Shift+Ctrl+D на Linux/Windows, ⇧⌘D на macOS) для функцій тепер коректно працює у разі шаблонів функцій.
- Додано підтримка популярного шаблону рефакторингу - інвертування блоків
if-else
. Цей шаблон часто використовується для спрощення коду, який використовує безліч вкладених блоків if.
Для розробників аудіо додатків
Особливо хочеться розповісти про покращення для тих, хто розробляє мультиплатформні аудіо-додатки. Для такої розробки існує відома бібліотека на C++ – JUCE. У CLion 2017.3 ми виправили кілька проблем у мовній підтримці, які виникали у разі використання JUCE.
Але головною новиною для користувачів JUCE став вихід JUCE 5.2, де в новій версії Projucer додано можливість експортувати проект у CMake. А значить і відкривати його для подальшої розробки у CLion!
Інтеграція з Valgrind Memcheck
Одним із найбільш затребуваних запитів у трекері є інтеграція з інструментами профілювання, зокрема Valgrind. У цьому релізі додана можливість профілювання пам'яті за допомогою Valgrind Memcheck. На відміну від Google Sanitizers, які теж часто використовуються для цього завдання, Valgrind Memcheck підтримує безліч платформ (але, на жаль, як і Sanitizers, не доступний Windows). Він не вимагає перекомпілювання програми і працює з файлом, що виконується, зібраним за допомогою як Clang, так і GCC. При цьому інструмент дозволяє ідентифікувати цілий спектр проблем роботи з пам'яттю:
- Виток пам'яті
- Некоректний доступ до пам'яті, наприклад, після виклику free
- Невідповідність операцій виділення та звільнення пам'яті (malloc/free, new/delete)
- Використання неініціалізованих змінних
- Передача як параметри у функції типу memcpy областей, що перетинаються пам'яті
- Передача у функції виділення пам'яті некоректного розміру, наприклад, негативного
Тепер у CLion можна запустити конфігурацію з Valgrind Memcheck і у вікні результатів запуску отримати інформацію про потенційні проблеми, включаючи шматок стека, що відповідає проблемі, та перегляд місця в коді, де трапилася проблема. Налаштування дозволяють встановити так звані suppression файли (для відключення аналізу в бібліотеках, наприклад) та опції для запуску Valgrind Memcheck.
Поліпшення у сфері модульного тестування
Інтеграція з фреймворками для модульного тестування в CLion передбачає запуск тестів у вбудованому вікні з виведенням результатів (test runner). Якщо раніше підтримувалися Google Test та Catch, то тепер ще додали Boost.Test:
У лівій бічній колонці ("Гаттер") можна помітити нові значки. Вони працюють для всіх трьох фреймворків, що підтримуються, і служать для запуску тестів – натиснувши на них, можна вибрати запуск, налагодження або запуск з Valgrind Memcheck. А після першого запуску тестів значок змінює вигляд і починає відображати статус тесту – пройдено чи впало. Досить зручно, якщо хочеться відкрити файл з нещодавно запущеними тестами і швидко зрозуміти, що і як. Аналогічно, за допомогою значка в лівому гаттері можна запускати будь-яку функцію main, для якої знайдеться CMake таргет важко зрозуміти, що саме і як запускати). Run конфігурацію створювати не обов'язково – CLion створює її автоматично при натисканні на іконку.
Налаштування тулчейнів, компілятора, CMake
Вже майже традиційні осінні зміни в області CMake та налаштування тулчейнів та конфігурацій не обійшли і цей реліз. Головне:
- З'явилася можливість конфігурувати в IDE кілька тулчейнів і вибирати потрібний для кожного проекту, або навіть використовувати кілька різних для різних націлів на одному проекті. Особливо це актуально буде користувачам на Windows, які хочуть легко та швидко перемикатися між оточеннями Cygwin/MinGW/MSVC:
- З'явилася можливість легко перемикати компілятори C і C++, а також Make. Тепер це можна зробити в налаштуваннях тулуба, згаданих вище.
- З'явилася можливість створити кілька CMake профайлів з одним і тим же типом білда (Debug, Release, etc.), але різними опціями, налаштуваннями оточення, використовуваними тулчейнами (наприклад, компіляторами) тощо:
- CMake-профайл тепер не пов'язаний безпосередньо з конфігурацією run/debug, а вибирається незалежно:
Нові версії відладчиків та CMake
У CLion 2017.3 включені в поставку оновлені версії наступних інструментів:
- CMake оновлено до 3.9
- GDB оновлено до 8.0
- LLDB оновлено до 5.0
Слід зазначити, що GDB 8.0, який постачається разом із CLion, зібраний з підтримкою кількох архітектур. А це означає, що при віддаленому налагодженні між різними платформами (наприклад, з Windows на Linux) не потрібно більше перезбирати GDB, а можна буде скористатися вбудованим.
Kotlin/Native
JetBrains створила та активно розробляє нову мову програмування Kotlin, яка цього року на Google I/O була офіційно визнана мовою для розробки Android-додатків. JetBrains має проект Kotlin/Native, який дозволяє компілювати Kotlin безпосередньо в машинний код таких платформ як iOS, Linux, Windows, macOS і WebAssembly.
Kotlin/Native інтегрується з такими технологіями зі світу нативної розробки, як Clang та LLDB. А CLion, у свою чергу, розглядається нами як IDE для нативної розробки, в якій вже є підтримка C та С++ як основних мов, а також Python, Swift та Rust як додаткових (все в рамках CMake поки що). Тому цілком природно було випустити плагін для розробки Kotlin/Native саме для CLion. Більше подробиць можна знайти у блозі Kotlin. А в майбутньому очікується поява Kotlin/Native та в інших інструментах JetBrains.