Привет!
Наша команда приготовила всем разработчикам на C и C++ новогодний подарок под елку – новый релиз 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++
Глобальные улучшения
Практически все, наверное, знают, что мы пишем свой парсер для C++. Это вызывает разнообразные дискуссии, как среди наших пользователей (такие дискуссии зарождаются под любым нашим постом здесь на Хабре, reddit и пр.), так и внутри команды. Тем интереснее нам одновременно и улучшать текущее решение, и думать о возможных альтернативных вариантах (мы, кстати, ни один полностью не исключаем!). А в последнее время мы задумали глобально переработать наше решение, начав с подсистем, которые лежат в самом низу, и постепенно поднимаясь наверх. Версия CLion 2017.3 затронула list initialization и name lookup.
В случае list initialization, исправления, в основном, привели к тому, что CLion больше не показывает некорректные предупреждения вроде “too many arguments”, “too few arguments”, “no matching constructor”. И, напротив, показывает их теперь там, где это нужно:
К тому же, 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! Мы даже записали короткое демо, в котором создаем демо аудиоплагина, экспортируем его в CMake, открываем в CLion, запускаем плагин в Ableton Live и отлаживаем его через 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-приложений. А еще у нас есть проект Kotlin/Native, который позволяет компилировать Kotlin напрямую в машинный код таких платформ как iOS, Linux, Windows, macOS и WebAssembly.
Вы спросите, причем тут CLion, IDE для кросс-платформенной разработки на C и С++? Дело в том, что Kotlin/Native интегрируется с такими технологиями из мира нативной разработки, как Clang и LLDB. А CLion, в свою очередь, рассматривается нами как IDE для нативной разработки, в которой уже есть поддержка C и С++ как основных языков, а также Python, Swift и Rust как дополнительных (все в рамках CMake пока что). Поэтому вполне естественно было выпустить плагин для разработки на Kotlin/Native именно для CLion. Больше подробностей можно найти в блоге Kotlin. А в будущем можно ожидать появления Kotlin/Native и в других наших инструментах.
На этом я закончу обзор новых возможностей CLion 2017.3. Есть, конечно, еще и обновления в поддержке систем контроля версий и другие возможности, пришедшие из платформы IntelliJ. Но я не буду повторяться и просто сошлюсь на блог пост про IntelliJ IDEA 2017.3 здесь на Хабре.
Демонстрация новых возможностей CLion 2017.3 на английском языке от нашего девелопер-адвоката:
Если стало интересно, скачайте 30-дневную бесплатную пробную версию с официального сайта компании, где в разделе цен можно также узнать о стоимости подписки.
Следите также за статьями и обновлениями в нашем англоязычном блоге. Мы будем рады ответить на любые ваши вопросы в комментариях.
Ваша команда JetBrains CLion
The Drive to Develop
Автор: Казакова Анастасия