Привет, Хабр!
Вот и подоспел первый релиз CLion в этом году — 2018.1! В этом посте мы расскажем, что мы успели реализовать за эти месяцы и какие планы у нас на следующий релиз.
Cначала очень коротко о главном. В этот релиз вошли:
Можно прямо сейчас скачать бесплатную 30-дневную версию с нашего сайта и попробовать новые возможности. Для этого мы даже подготовили специальный небольшой демо-проект. А ниже поговорим об улучшениях более подробно.
Спойлеры! Мы смотрим на разные альтернативные варианты языкового движка (есть и наши наработки, и clang, и много чего еще интересного), проводим тесты, сравнения, измерения производительности, анализ возможностей по расширению. А пока все это в процессе, мы продолжаем улучшать текущий языковой движок.
Во-первых, мы исправили десятки различных проблем в парсере и анализаторе кода. Многие пользователи на стадии Early Access Program отмечали улучшения, так что верим, что все это было не зря. В частности, множество проблем и ложных ошибок в анализаторе кода исправлено для случая тернарного оператора.
Во-вторых, рефакторинги Rename и Change Signature теперь более надежно обновляют иерархии. Например, если переименовать функцию в классе-наследнике, то CLion не только предложит обновить базовый класс, но и пройдется по другим классам, унаследованным от этого базового:
Такие каскадные изменения просто необходимы, чтобы код после рефакторинга остался корректным.
И самое главное, добавлена поддержка двух больших возможностей C++17:
В прошлом году (в версии 2017.2) мы добавили в CLion интеграцию с инструментом для анализа кода Clang-Tidy. Он предоставляет десятки различных проверок, включая группы Clang Analyzer, C++ Core Guidelines, Modernize и Google. В этом релизе мы обновили забандленную версию инструмента, чуть изменили набор проверок, включенных по умолчанию, а самое главное:
Для начала, компилятор Microsoft Visual C++ теперь включен по умолчанию. То есть, если он у вас установлен, то можно сразу воспользоваться им в CLion (не надо, как раньше, идти и включать настройку в Registry).
Но самое заметное изменение — это поддержка Windows Subsystem for Linux (WSL). Это подсистема на Windows 10 предоставляет Linux-окружение, встроенное в Windows, и позволяет собирать, запускать и отлаживать Linux-приложения на Windows.
CLion теперь умеет работать с таким тулчейном и даже позволяет запускать приложение с Valgrind Memcheck — инструментом для поиска утечек памяти, некорректного доступа к памяти, использования неинициализированных переменных и пр.
Таким образом, WSL дает уникальную возможность запускать приложения, которые не доступны на Windows (как например, тот же Valgrind).
Кстати, если говорить про средства анализа ошибок работы с памятью, сейчас наша команда занимается интеграцией Google Sanitizers. Надеемся, что результаты будут доступны уже в 2018.2.
Стоит отметить, что интеграция WSL реализована по ssh, так как это первый шаг к полноценной поддержке удаленной разработки в CLion. Ее первый прототип мы надеемся показать уже в 2018.2. А пока можно попробовать WSL — ссылку на скрипт для быстрой настройки WSL, а также детали работы можно найти в блоге.
Мы начали процесс отделения проектной модели CMake от CLion. Первые результаты уже можно наблюдать в релизе 2018.1. А именно, CLion позволяет теперь открыть файл или целую папку, не имеющую CMake-файлов. Конечно, многие умные функции по работе с кодом окажутся отключены (так как все информацию о проекте CLion берет именно из проектной модели), но того, что останется, хватит для первичного ознакомления с кодом, чтения отдельных файлов и пр.
В CLion 2018.1 появилась возможность вызвать CMake Install. Соответствующее действие доступно из меню Run или в возможных шагах в Run/Debug-конфигурации (там Install можно добавить, например, сразу после сборки, но до запуска конфигурации). При вызове Install происходит запуск команды cmake install и, соответственно, устанавливаются все таргеры, для которых определена эта команда.
Кстати, теперь создавать файл CMakeLists.txt можно из меню создания нового файла (Create new file — Alt+Insert на Windows/Linux, ?N на macOS):
Преимущество в том, что файл будет создаваться по шаблону, который можно кастомизировать под свои нужды в настройках Editor | File and Code Templates.
Да, мы знаем, вы просили эту возможность очень давно, а embedded-разработка так вообще не представляет себе IDE без такой возможности… В CLion 2018.1 hex view экспериментальный и доступен под ключом в регистре:
Отображаться hex view будет как в окне отладчика:
так и в самом редакторе, в Inline Variables View:
Почему так сложно, почему экспериментальная поддержка? Скажем так, реализация пока вызывает у нас сомнения, и хочется сделать лучше. К тому же, доступен пока hex только для целочисленных типов, и нет binary view.
Хоть CLion и написан в основном на Java и Kotlin, как и вся платформа IntelliJ, у нас есть небольшая часть разработки на C++. А значит, мы, конечно, пробуем свой продукт для своих же задач. И пусть хочется, чтобы было больше dogfooding-а в нашей работе, но даже сейчас видны результаты. В этом релизе случилось сразу несколько улучшений редактора по мотивам нашего собственного использования продукта (это уже не говоря о разнообразных баг-фиксах).
“Хлебные крошки” (breadcrumbs) для C и C++ добавлены для пространств имен, классов, структур, функций и лямб. Это такой удобный способ чтения и навигации по коду — внизу редактора показываются небольшие маркеры того, где сейчас находится курсор, и можно кликать по этой иерархии маркеров, чтобы подниматься на уровень выше (например, из функции в класс, в котором она определена):
Платформенная возможность unwrap/remove теперь реализована и в CLion, для кода на C/C++. С помощью нее можно удалить те блоки кода, которые включают данный (где стоит курсор). Особенно это бывает полезно, чтобы убрать объемлющий тернарный оператор, вызов функции или, например, блок if..else, содержащий текущее выражение:
В этой версии также добавилось сворачивание управляющих конструкций if/else, do/while, for, switch (Shift+Ctrl+Period / Ctrl+= на Windows/Linux и ??./?+ на macOS). И опции для настройки сворачивания окна сообщений при сборке проекта.
В CLion, помимо C/C++, уже некоторое время есть встроенная поддержка Python (аналог PyCharm Community Edition), поддержка JavaScript, XML, HTML, CSS и других веб-технологий, а также плагин для Swift. С конца прошлого года появилась поддержка Kotlin/Native (через плагин). А в версии 2018.1 мы добавили встроенную поддержку для Objective-C / Objective-C++ (список возможностей смотрите тут), а также положили в репозиторий плагин для Fortran и обновили плагин для Rust. Про последнее поподробнее. Это тот же плагин, что доступен в IntelliJ IDEA, но:
Подробнее про плагины для Fortran и Rust смотрите тут.
И в заключение, демонстрация новых возможностей CLion 2018.1 на английском языке от нашего девелопер-адвоката:
Вот и все! Заинтересовались? Тогда качайте 30-дневную бесплатную пробную версию с официального сайта компании, где в разделе цен можно также узнать о стоимости подписки. Следите также за статьями и обновлениями в нашем англоязычном блоге. Мы будем рады ответить на любые ваши вопросы в комментариях.
Ваша команда JetBrains CLion
The Drive to Develop
Вот и подоспел первый релиз CLion в этом году — 2018.1! В этом посте мы расскажем, что мы успели реализовать за эти месяцы и какие планы у нас на следующий релиз.
Cначала очень коротко о главном. В этот релиз вошли:
- Поддержка языка C++
- Поддержка возможности C++17: structured binding
- Поддержка возможности C++17: операторы if и switch с инициализаторами
- Множество баг-фиксов и улучшений
- Возможность использовать файлы конфигурации Clang-Tidy в CLion, а также настраивать опции для проверок из Clang-Tidy в интерфейсе CLion
- Улучшения для пользователей Windows
- Компилятор Microsoft Visual C++ включен по умолчанию
- Поддержка подсистемы WSL
- CMake и не только
- Вызов из IDE CMake Install
- Шаблоны для создания файлов CMakeLists.txt
- Возможность открыть файл или папку без проектной модели CMake
- Экспериментальная поддержка hex view в отладчике
- Улучшения редактора:
- “Хлебные крошки” (breadcrumbs) для C/C++
- Действие Unwrap
- Сворачивание управляющих конструкций
- Поддержка новых языков в CLion: Objective-C / Objective-C++, Rust, Fortran
Можно прямо сейчас скачать бесплатную 30-дневную версию с нашего сайта и попробовать новые возможности. Для этого мы даже подготовили специальный небольшой демо-проект. А ниже поговорим об улучшениях более подробно.
Поддержка языка C++
Спойлеры! Мы смотрим на разные альтернативные варианты языкового движка (есть и наши наработки, и clang, и много чего еще интересного), проводим тесты, сравнения, измерения производительности, анализ возможностей по расширению. А пока все это в процессе, мы продолжаем улучшать текущий языковой движок.
Во-первых, мы исправили десятки различных проблем в парсере и анализаторе кода. Многие пользователи на стадии Early Access Program отмечали улучшения, так что верим, что все это было не зря. В частности, множество проблем и ложных ошибок в анализаторе кода исправлено для случая тернарного оператора.
Во-вторых, рефакторинги Rename и Change Signature теперь более надежно обновляют иерархии. Например, если переименовать функцию в классе-наследнике, то CLion не только предложит обновить базовый класс, но и пройдется по другим классам, унаследованным от этого базового:
Такие каскадные изменения просто необходимы, чтобы код после рефакторинга остался корректным.
И самое главное, добавлена поддержка двух больших возможностей C++17:
- Structured binding
- Операторы if и switch с инициализаторами
Улучшения в поддержке Clang-Tidy
В прошлом году (в версии 2017.2) мы добавили в CLion интеграцию с инструментом для анализа кода Clang-Tidy. Он предоставляет десятки различных проверок, включая группы Clang Analyzer, C++ Core Guidelines, Modernize и Google. В этом релизе мы обновили забандленную версию инструмента, чуть изменили набор проверок, включенных по умолчанию, а самое главное:
- Добавили возможность использовать конфигурационные файлы .clang-tidy вместо настроек IDE — это может быть полезно, если хочется сохранить настройки Clang-Tidy в системе контроля версий и/или поделиться ими со всей командой (где не все используют CLion). Также это позволяет запускать Clang-Tidy как из IDE, так и из консоли на одном и том же наборе проверок, не задумываясь о том, чтобы передавать одинаковые параметры в обоих случаях.
- Некоторые проверки Clang-Tidy позволяют указывать опции, влияющие на поведение проверки. Например, modernize-use-nullptr позволяет указать, какие константы заменять на nullptr. Сделать это можно теперь и в настройках CLion (Editor | Inspections | C/C++ | General | Clang-Tidy).
WSL и другие изменения тулчейна на Windows
Для начала, компилятор Microsoft Visual C++ теперь включен по умолчанию. То есть, если он у вас установлен, то можно сразу воспользоваться им в CLion (не надо, как раньше, идти и включать настройку в Registry).
Но самое заметное изменение — это поддержка Windows Subsystem for Linux (WSL). Это подсистема на Windows 10 предоставляет Linux-окружение, встроенное в Windows, и позволяет собирать, запускать и отлаживать Linux-приложения на Windows.
CLion теперь умеет работать с таким тулчейном и даже позволяет запускать приложение с Valgrind Memcheck — инструментом для поиска утечек памяти, некорректного доступа к памяти, использования неинициализированных переменных и пр.
Таким образом, WSL дает уникальную возможность запускать приложения, которые не доступны на Windows (как например, тот же Valgrind).
Кстати, если говорить про средства анализа ошибок работы с памятью, сейчас наша команда занимается интеграцией Google Sanitizers. Надеемся, что результаты будут доступны уже в 2018.2.
Стоит отметить, что интеграция WSL реализована по ssh, так как это первый шаг к полноценной поддержке удаленной разработки в CLion. Ее первый прототип мы надеемся показать уже в 2018.2. А пока можно попробовать WSL — ссылку на скрипт для быстрой настройки WSL, а также детали работы можно найти в блоге.
CMake & non-CMake
Мы начали процесс отделения проектной модели CMake от CLion. Первые результаты уже можно наблюдать в релизе 2018.1. А именно, CLion позволяет теперь открыть файл или целую папку, не имеющую CMake-файлов. Конечно, многие умные функции по работе с кодом окажутся отключены (так как все информацию о проекте CLion берет именно из проектной модели), но того, что останется, хватит для первичного ознакомления с кодом, чтения отдельных файлов и пр.
В CLion 2018.1 появилась возможность вызвать CMake Install. Соответствующее действие доступно из меню Run или в возможных шагах в Run/Debug-конфигурации (там Install можно добавить, например, сразу после сборки, но до запуска конфигурации). При вызове Install происходит запуск команды cmake install и, соответственно, устанавливаются все таргеры, для которых определена эта команда.
Кстати, теперь создавать файл CMakeLists.txt можно из меню создания нового файла (Create new file — Alt+Insert на Windows/Linux, ?N на macOS):
Преимущество в том, что файл будет создаваться по шаблону, который можно кастомизировать под свои нужды в настройках Editor | File and Code Templates.
Hex view в отладчике
Да, мы знаем, вы просили эту возможность очень давно, а embedded-разработка так вообще не представляет себе IDE без такой возможности… В CLion 2018.1 hex view экспериментальный и доступен под ключом в регистре:
- Идем в диалог Find Action (Shift+Ctrl+A на Linux/Windows, ??A на macOS), пишем там “Registry”, открываем Registry.
- Там ищем cidr.debugger.value.numberFormatting.hex (достаточно просто ввести hex и запустится поиск) и включаем опцию.
- Теперь идем в настройки IDE: Build, Execution, Deployment | Debugger | Data Views | C/C++ и там включаем hex view.
Отображаться hex view будет как в окне отладчика:
так и в самом редакторе, в Inline Variables View:
Почему так сложно, почему экспериментальная поддержка? Скажем так, реализация пока вызывает у нас сомнения, и хочется сделать лучше. К тому же, доступен пока hex только для целочисленных типов, и нет binary view.
Улучшения в редакторе
Хоть CLion и написан в основном на Java и Kotlin, как и вся платформа IntelliJ, у нас есть небольшая часть разработки на C++. А значит, мы, конечно, пробуем свой продукт для своих же задач. И пусть хочется, чтобы было больше dogfooding-а в нашей работе, но даже сейчас видны результаты. В этом релизе случилось сразу несколько улучшений редактора по мотивам нашего собственного использования продукта (это уже не говоря о разнообразных баг-фиксах).
“Хлебные крошки” (breadcrumbs) для C и C++ добавлены для пространств имен, классов, структур, функций и лямб. Это такой удобный способ чтения и навигации по коду — внизу редактора показываются небольшие маркеры того, где сейчас находится курсор, и можно кликать по этой иерархии маркеров, чтобы подниматься на уровень выше (например, из функции в класс, в котором она определена):
Платформенная возможность unwrap/remove теперь реализована и в CLion, для кода на C/C++. С помощью нее можно удалить те блоки кода, которые включают данный (где стоит курсор). Особенно это бывает полезно, чтобы убрать объемлющий тернарный оператор, вызов функции или, например, блок if..else, содержащий текущее выражение:
В этой версии также добавилось сворачивание управляющих конструкций if/else, do/while, for, switch (Shift+Ctrl+Period / Ctrl+= на Windows/Linux и ??./?+ на macOS). И опции для настройки сворачивания окна сообщений при сборке проекта.
Больше, чем IDE для C/C++
В CLion, помимо C/C++, уже некоторое время есть встроенная поддержка Python (аналог PyCharm Community Edition), поддержка JavaScript, XML, HTML, CSS и других веб-технологий, а также плагин для Swift. С конца прошлого года появилась поддержка Kotlin/Native (через плагин). А в версии 2018.1 мы добавили встроенную поддержку для Objective-C / Objective-C++ (список возможностей смотрите тут), а также положили в репозиторий плагин для Fortran и обновили плагин для Rust. Про последнее поподробнее. Это тот же плагин, что доступен в IntelliJ IDEA, но:
- Он теперь умеет работать с Cargo в CLion (раньше был только CMake)
- В CLion (и пока только в нем) в плагине есть отладчик для Rust
Подробнее про плагины для Fortran и Rust смотрите тут.
И в заключение, демонстрация новых возможностей CLion 2018.1 на английском языке от нашего девелопер-адвоката:
Вот и все! Заинтересовались? Тогда качайте 30-дневную бесплатную пробную версию с официального сайта компании, где в разделе цен можно также узнать о стоимости подписки. Следите также за статьями и обновлениями в нашем англоязычном блоге. Мы будем рады ответить на любые ваши вопросы в комментариях.
Ваша команда JetBrains CLion
The Drive to Develop
Alex_ME
А есть возможность просмотра памяти, как это сделано в Visual Studio и многих других IDE?
anastasiak2512 Автор
Memory View пока нет. Надеемся, что появится в 2018.x каком-нибудь.
SAKrisT
Пройдя по ссылке, можно проголосовать. Я свой голос уже давно оставил :)
eReS
Планируется добавление Dlang?
anastasiak2512 Автор
Пока нет таких планов.
dion
Эхх. Когда вы уже поддержку ninja прикрутите… сmake_ninja_wrapper.py не предлагать, ибо от него больше проблем чем пользы.
anastasiak2512 Автор
Пока не знаем, как порешать некоторые технические проблемы. Но раз уж начали отделение CMake от CLion, может и сможем скоро сделать.
borisxm
Надеюсь, это не ухудшит поддержку cmake проектов.
anastasiak2512 Автор
Не должно. Мы стараемся следить за этим. Наоборот, станет возможным поправить какие-то проблемы, которые в старой архитектуры не решались.
axel92
А почему комплектный дебагер с версии 2017.3 перестал вообще выводить на экран текст(printf)? Тяжело ориентироваться в таком режиме, по этому все еще пользуюсь версией 2017.2.3.
anastasiak2512 Автор
Мы не в курсе о чем речь, кажется. Какой дебагер — GDB или LLDB? Какая платформа? Можно пример и логи дебагера?
Есть такая проблема на винде, но она не сейчас появилась.
axel92
Да именно такая проблема как по ссылке, этим багом занимаются?
anastasiak2512 Автор
Это, к сожалению, не очень тривиальная проблема с pty на Windows. И появилась именно с GDB 8.
fflush
помогает. Хорошего решения в виде фикса пока не придумали.Inobelar
Можно ждать поддержку QMake / Qbs?
anastasiak2512 Автор
qmake вряд ли будет первым на очереди. А вот что-то из makefiles, open folder, compilation database – весьма вероятно. А еще project model API, чтобы можно было плагины для любых проектных моделей любым желающим писать.
nexmean
А не использовать
даже под дулом пистолетаRLS для Rust — это у вас принципиальное решение? А то нынче ваш плагин для Rust не способен определить и 5% ошибок, только самые тривиальные, в то время как RLS выдаёт все те же ошибки, что выдаёт компилятор.anastasiak2512 Автор
Передаю со слов разработчика плагина:
по поводу RLS (Rust Language Server) — да, это принципиальное решение, так как позволяет нам использовать полноценную инфраструктуру нашей платформы (что было бы несколько затруднительно, если бы мы просто использовали RSL). Есть соответствующее issue по данному поводу https://github.com/intellij-rust/intellij-rust/issues/964 с соответствующими комментариями. Я не большой эксперт в RLS, но судя по комментариям (в том числе этому https://github.com/intellij-rust/intellij-rust/issues/964#issuecomment-328878107) за счет этого мы имеем как минимум лучший auto completion.
melon
Фичи это конечно хорошо, но основаная проблема вашей среды — это дикие тормоза на больших проектах!!! И это кажется нужно решать в первую очередь, не знаю куда смотрят ваши менеджеры вообще, если честно. youtrack.jetbrains.com/issue/CPP-7168 youtrack.jetbrains.com/issue/CPP-8459. Каждый день у меня зависает Clion по 3-5 раз на дню, приходится его прибивать или юзать другой редактор(походу придётся перейти, раз вы никак не хотите это фиксить). Зависания до 300 секунд — это ни в какие ворота.
anastasiak2512 Автор
Проблем с производительностью на больших и сложных проектах действительно довольно много. И мы над ними работаем. Есть некоторые принципиальные ограничения платформы, которые, как выяснилось, очень критичны для C++. Именно с ними мы сейчас и работаем. Если точнее, есть большой план на этот год, как убирать фризы в редакторе. В 2018.1 уже попала часть изменений, связанная с фризами при печати в редакторе. Стало значительно лучше. Задачки, на которые Вы ссылаетесь, тоже есть в плане.
И да, менеджеров у нас почти нет, но есть команда, которой не все равно, поверьте. И мы сами сожалеем, что не успеваем быстрее такие проблемы решать.
melon
А ещё конечно вот эта мега просто крутой баг! Очень мешает жить! youtrack.jetbrains.com/issue/CPP-5715 В кракце, у тебя 2 одинаковых файла cool_class.hpp в разных папках проекта. И при навигации из cool_class.cpp в разных папках ты попадаешь в тот, который находится в папке, которая выше по алфавитному порядку. Причём воспроизводитмость 100%. Бесит жутко, потому что в больших проектах имена классов часто повторяеются в разных папках. И это вы не можете поправить 2 года ?!!! Серьёзно? Да это любой студент поправит за 1 неделю! Дайте уже нормального леща вашим менеджерам, чтобы они фиксили боли разработчиков, которые реально пользуются вашей IDE, иначе всё больше народу уйдёт с неё на что-то другое.
anastasiak2512 Автор
Мы этот баг чуть ли не каждое планирование обсуждаем, но это не на полдня работа, а других более приоритетных задач очень много. Но мы про него помним.
Ktator
А что с поддержкой Qt? Есть удобный импорт из проекта Qt Creator?
anastasiak2512 Автор
Qmake не поддерживается и я не уверена, что существует хороший конвертер из qmake в cmake. Есть как бы встроенная Import Project функциональность, но она, конечно, довольно базовая.
VAAKAraceGUM
Мне иногда кажется, что лучшим решением для CLion, на текущий момент, было бы — немного притормозить с внедрением новой функциональности и в 1 релиз все силы кинуть на фикс существующих многочисленных багов в уже существующей функциональности. За последние 2 года я насоздавал в Вашем баг-трекере более 70 откровенных багов и проблем, приводящих к тому, что пользоваться той или иной функцией IDE затруднительно или невозможно. Ни один баг так и не был поправлен. Видимо это связано с «есть более приоритетные задачи». Я разрабатываю несколько кросс-платформеных приложений и у меня возникало непонимание — почему в одной и той-же версии IDE и одном и том же проекте — баги (в области работы с исходным кодом) разные. Начал изучать вопрос и понял. У Вас существует проблема — часть фиксов, которая идет с обновлением просто не применяется к старой версии. На всех 3 моих IDE CLion на разных ОС с и с разной начальной версией установки разный набор «недоисправленных» багов. Жду момента когда смогу всецело пересесть с громоздкой и неповоротливой VS и пока так и не получается…
anastasiak2512 Автор
Давайте попробуем разобраться: