Привет, Хабр!

Столько всего хочется сегодня рассказать, что даже сложно выбрать, с чего начать. Так что сначала попробую коротко обо всем самом важном:

  1. Продукту CLion вчера исполнилось 5 лет! В честь праздника мы смонтировали небольшую видеоисторию, своеобразное воспоминание и рассказ о том, как же интересно все развивалось для нас эти 5 лет. Сразу предупредим, история на английском:


  2. Вчера же случился первый в этом году большой релиз продукта – CLion 2020.1. В нем мы поддержали диалект CUDA, переписали Dataflow Analysis на Clang, научили IDE работать с компиляторами Clang-cl и IAR, а также внесли множество других улучшений и исправлений.
  3. Последние несколько месяцев нашей команде стало очень грустно без конференций и сопутствующих выставок, где мы всегда с удовольствием находимся у стендов компании и много общаемся с нашими пользователями и сообществом в целом. Поэтому мы решили организовать онлайн-сессию вопросов и ответов с командой – CLion Ask Me Anything (AMA) session. Сессия пройдет 7 мая в режиме реального времени, требуется предварительная запись. Присоединяйтесь и задавайте любые вопросы по продукту!

Теперь давайте поговорим подробнее обо всех этих событиях.

CLion-у — пять!


Взросление детей всегда удивительно и зачастую неожиданно для родителей. С продуктом та же история — вроде только вчера запускали раннюю версию и вели итоговый отсчет к релизу 1.0, а сегодня уже отмечаем круглую дату. CLion сейчас — это более 200 тысяч пользователей ежемесячно, среди которых команды таких компаний, как BMW, NASA, Tencent, Tesla и многих других, и конечно, сотрудничество с Google и Android Studio.

Мы рады поддерживать множество студентов по миру, которые именно с CLion делают свои первые шаги в разработке программного обеспечения. И безумно счастливы знать, что треть команд ICPC в финале 2019 также использовали CLion!

ICPC tools Final

Волнение с каждым новым релизом, ответственность перед огромным количеством наших пользователей, сплоченность команды, которая делает огромное дело, — все это переполняет нас, и мы счастливы разделить наш первый небольшой юбилей со всем сообществом Хабра! Надеемся, ролик вам понравился ;)

CLion 2020.1


Может, не самый большой в масштабах прошедшей пятилетки, но точно важный релиз мы выпустили вчера. Поговорим по порядку о самых важных изменениях:

  • Поддержка диалекта CUDA.
  • Для разработчиков встроенных систем — поддержка компилятора IAR и плагин для интеграции с PlatformIO.
  • Обновленная интеграция с инструментами Clang — мигрирование DFA на Clangd, улучшенное автодополнение, более тесная работа с Clang-Tidy и ClangFormat.
  • Для разработчиков на Windows — поддержка компилятора Clang-cl и отладчик по умолчанию.
  • Значения параметров по умолчанию в рефакторинге Change Signature.
  • Более удобные конфигурации для запуска и отладки, включая перенаправление ввода и поддержка макросов IDE.
  • Обновления форматтера, улучшения редактора и многое другое.

CUDA


CLion теперь поддерживает диалект CUDA C/C++. Поддержка включает в себя:

  • корректный парсер кода (для исключения «красного» кода и некорректной работы анализатора кода);
  • подсветку и разнообразные умные действия, такие как навигация и просмотр документации;
    CUDA quick doc
  • обновленный мастер создания новых проектов — теперь в него включен шаблон для проектов CUDA;

    CUDA new project
  • поддержку расширений файлов CUDA (.cu/.cuh);
  • специальные таргеты CMake для CUDA — диалог добавления нового файла теперь предложит добавить его не только в подходящие таргеты, созданные обычными командами CMake, но и специфичными для CUDA (cuda_add_executable / cuda_add_library);

    CUDA add to targets
  • и даже автодополнение для угловых скобок для вызовов ядра:

    CUDA completion

Примечание: для тестов и скриншотов использовался настоящий CUDA-проект с GitHub: ClaraGenomicsAnalysis.

Нас спрашивали, почему же мы так сфокусировались на CUDA, а не других специфических областях, например Qt. Если коротко, то мы бы, конечно, хотели поддержать все типы проектов на C/C++ в нашей IDE. Но в условиях ограниченных ресурсов приходится делать выбор и скорее сосредоточиться на поддержке максимально универсальных возможностей. Такие диалекты, как CUDA, если не поддерживаются «из коробки», то приводят к красному коду, ошибкам анализатора кода и другим проблемам с основными возможностями IDE. В отличие от Qt, где общий парсер вполне справляется с кодом и только не хватает каких-то специфических возможностей.

Для разработчиков встроенных систем


Мы продолжаем работу по поддержке разработчиков встроенных систем. Благодаря взаимодействию с компанией IAR Systems AB мы смогли получить партнерские лицензии и добавить в CLion поддержку компилятора IAR. Раньше мы не могли правильно считать информацию от компилятора и такие проекты не загружались в CLion корректно. Теперь все работает!

IAR compiler

Стоит отметить, что для использования компилятора требуется использовать тулчейн MinGW. А вот здесь можно найти несколько советов о том, как использовать CMake с IAR Embedded Workbench.

Мы продолжим сотрудничество с IAR Systems AB, и, надеюсь, в один прекрасный день в CLion также появится поддержка их отладчика.

С самого первого релиза CLion мы общались с создателями PlatformIO, уникальной экосистемы для быстрого старта проектов под встроенные системы. Например, многим она помогла начать первый проект на Arduino. К релизу 2020.1 мы собрали хоть и довольно базовый, но полезный плагин PlatformIO for CLion. Самая главная его возможность — создать проект для PlatformIO на основе CMake, для этого достаточно выбрать такой тип проекта в мастере создания новых проектов:

PlatformIO plugin

Плагин автоматически создает конфигурации запуска и отладки, специфические для PlatformIO, а также позволяет отлаживать с помощью отладчика PIO Unified Debugger прямо из CLion. Больше информации можно найти в официальной документации. Пробуйте и пишите ваши пожелания по дальнейшему развитию — мы сейчас как раз раздумываем, куда и как развивать этот плагин дальше.

Обновленная интеграция с инструментами Clang


Как уже известно, мы сейчас активно портируем все больше и больше возможностей на языковой движок на основе Clangd. Во-первых, чтобы быстрее получать поддержку новых возможностей языка и адаптировать действия IDE для них, а, во-вторых, чтобы в некоторых случаях улучшать производительность редактора (не везде, к сожалению, Clangd является таким универсальным средством).

В релизе 2020.1 мы много времени уделили исправлениям в автодополнении на основе Clangd (оно появилось в версии 2019.3). И, решив, что результаты у такого подхода довольно хорошие, включили по умолчанию режим, в котором опции для автодополнения берутся полностью из Clangd. Включить обратно смешанный режим работы можно в настройках:

Clangd completion

Но мы не рекомендуем этого делать без веских на то причин, так как объединение результатов от двух разных провайдеров может вызвать проблемы с приоритетами. К тому же, судя по нашим измерениям, новое автодополнение на базе Clangd не медленнее, а зачастую и быстрее встроенного.

На Clangd в этом релизе также переехал анализ потока данных (DFA). Этот анализатор заслуживает отдельной статьи, ибо умеет и делает то, чего не делают обычно компиляторы (в основном потому, что им это не нужно, хотя теоретически это возможно и на их стороне воспроизвести) — анализирует, как данные движутся по графу потока управления и, исходя из этого знания, находит потенциальные ошибки. Например, условия, которые всегда истинны или ложны, бесконечные рекурсии и циклы, пропущенные return-выражения, неиспользуемые значения, параметры и локальные переменные:

DFA always true

Теперь это все работает на Clangd. И мы надеемся, что это улучшит производительность анализов кода на ваших проектах. К сожалению, раньше нам часто приходилось советовать пользователям отключить именно анализ DFA для улучшения производительности редактора. Если это ваш случай — предлагаем вам включить анализатор обратно. Будем ждать ваших отзывов в нашу техподдержку и трекер.

В довершение про инструменты Clang стоит отметить улучшения в поддержке Clang-Tidy и ClangFormat:

  • При обнаружении в проекте конфигурационного файла .clang-tidy CLion автоматически отключает настройки Clang-Tidy в IDE и переходит на использование данного конфигурационного файла. Поведение управляется настройкой.
  • При обнаружении в проекте конфигурационного файла .clang-format CLion автоматически переключается на использование ClangFormat как инструмента форматирования кода на данном проекте. Если же вы решили переключиться на ClangFormat, но подходящего конфигурационного файла в вашем проекте нет, то CLion предложит его создать, выгрузив туда текущие настройки форматирования.

Для разработчиков на Windows


Если на Linux и macOS тулчейн в CLion выбрать довольно просто (берем либо GCC, либо Clang), то на Windows существует множество опций, в которых нелегко разобраться: Cygwin, MinGW/Mingw-w64, WSL, Visual Studio. При этом в рамках каждого тулчейна зачастую используют разные компиляторы. Нас долго просили о возможности использования Clang на Windows. И в CLion 2020.1 появилась возможность взять Clang-cl (либо с официального сайта LLVM, либо вместе с инструментами Visual Studio) и использовать его в рамках тулчейна Visual Studio:

Clang-cl

Кстати, вы заметили отладчик, выбранный по умолчанию в этом диалоге? Тот самый отладчик на базе LLDB для тулчейна Microsoft Visual C++, который разрабатывает наша команда и который мы представили в прошлом году, включен в новой версии по умолчанию! Правда, если вы хотите воспользоваться также поддержкой Native Visualizers, ее все же надо явно включить в настройках: Settings | Build, Execution, Deployment | Debugger Data Views | Enable NatVis renderers for LLDB.

Рефакторинг Change Signature


Среди множества рефакторингов в CLion выделяется Change Signature (Ctrl+F6 на Windows и Linux, ?F6 на macOS). Он позволяет изменить имя функции, тип возвращаемого значения, список параметров. При этом IDE обновляет все использования функции, чтобы сохранить корректность кода. Но что делать, если вы добавляете новый параметр? Раньше CLion во все использования проставлял значение типа по умолчанию (если оно есть) – 0 для чисел, nullptr для указателей. Теперь же, с версии 2020.1, появилась возможность указать значение, которое CLion подставит в использования функции, прямо в диалоге рефакторинга:

Change Signature
Если не указать ничего, то поведение будет как раньше.

Конфигурации запуска и отладки


Множество небольших улучшений в конфигурациях запуска и отладки в CLion сделало их гораздо более удобными в использовании.

Во-первых, конфигурации Remote GDB Server и Embedded GDB Server работают теперь с кастомными таргетами, а не только с таргетами CMake. Так что теперь отлаживаться на удаленной машине или на микроконтроллере можно не только в случае проекта на базе CMake, но и для любого другого типа проекта, для которого вы настроили кастомные таргеты (указав команды сборки и очистки проекта).

Во-вторых, для конфигураций типа CMake, Custom Build и Gradle Native Applications появилась возможность использовать макросы и переменные путей. С их помощью можно получить доступ ко многим полезным значениям:

IDE macros

И, наконец, в этих же типах конфигурации появилась опция перенаправления ввода программы. В сочетании с макросами Prompt/FilePrompt, она позволяет не только перенаправить ввод в программу из файла, но и показать диалог для выбора файла для ввода на старте конфигурации:

Input redirection

Обновления форматтера, улучшения редактора и многое другое


Стоит упомянуть еще несколько небольших точечных улучшений в разных подсистемах:

  • Отдельные настройки именования для полей структур и полей классов.
  • Возможность сворачивать блоки кода, выделенные при помощи #pragma region / #pragma endregion.
  • Окно просмотра документации теперь можно не только вызывать по шорткату, но и увидеть просто при наведении мышкой на интересующий символ.
  • Шрифтом по умолчанию в IDE теперь является JetBrains Mono — новый моноширинный шрифт от JetBrains, созданный специально для разработчиков и помогающий оптимизировать читаемость кода.
  • Светлая тема по умолчанию теперь одинаковая на всех трех платформах – IntelliJ Light.
  • Сессии терминала можно разбивать на несколько по горизонтали или вертикали. Таким образом, несколько сессий видно одновременно в одном табе.
  • Из платформы IntelliJ приехали также улучшения в интеграции с системами контроля версий.

CLion Ask Me Anything


Онлайн-сессия вопросов и ответов (на английском) с разработчиками из команды CLion запланирована на 7 мая. В сессии примут участие члены команды, отвечающие за следующие подсистемы:

  • Языковая поддержка C и C++, движок на базе Clangd, адаптация новых стандартов языка C++ в CLion.
  • Проектные модели.
  • Отладчики.
  • Форматирование кода (как родным инструментом, так и с помощью ClangFormat).
  • Модульное тестирование и интеграция с различными фреймворками.
  • Разработка встроенных систем.
  • Удаленная разработка.

Сессия бесплатная, но требуется предварительная регистрация. Мы также просим вас заранее подумать и по возможности уже в форме регистрации оставить вопросы для команды. Будет возможность задавать вопросы и по ходу сессии, через специальную форму (а я буду это все модерировать и раскидывать вопросы по коллегам), но у вопросов, заданных заранее, больше шансов получить развернутые ответы в начале сессии.

На этом на сегодня все. Дочитали до конца? Спасибо вам огромное за внимание! Пишите вопросы, предложения, восклицания в комментариях — мы всегда с радостью их читаем и отвечаем!

Команда CLion
The Drive to Develop