- PVSM.RU - https://www.pvsm.ru -
Привет!
На прошлой неделе, после релизов версии 2020.1, для всех наших десктопных продуктов случилось еще одно большое событие — мы открыли публичный доступ к пробной версии Rider for Unreal Engine [1]. На данный момент это отдельный продукт, версия нашей среды для разработки Rider, но с поддержкой C++ и Unreal Engine.
Так, стоп! Среда разработки на C++. Еще одна?! [2] Давайте разбираться по порядку.
Начнем с небольшой истории. Несколько лет назад мы собрали всех, кто в JetBrains делает инструменты для C++, чтобы обсудить, насколько пользователям тяжело ориентироваться в многообразии наших предложений. Ведь есть и CLion, и ReSharper C++, и поддержка для C++ в AppCode. Через несколько часов обсуждений пришли к таким выводам:
В итоге, мы решили унифицировать пользовательский опыт в наших инструментах для C++, но сошлись на том, что подход делать разные инструменты (пусть и с общим ядром или на общей платформе) для разных областей разработки ПО — правильный. На практике это выглядит следующим образом:
Так, а при чем тут Rider [7]? Какое отношение к C++ может иметь кроссплатформенная среда для разработки на .NET? На практике, около 30% пользователей Rider — это игровые студии и компании по разработке игр. Оно и понятно, ведь Rider во многом популярен именно как среда для разработки под Unity [8]. Уже не первый год команда Rider кастомизирует инструмент именно под этот игровой движок. Результат нравится не только программистам под Unity, но и самим Unity Technologies, с которыми мы давно и плодотворно взаимодействуем по части самой технологии.
Заходя ко многим нашим пользователям из области разработки игр, мы заметили, что у многих студий нет четкого разделения — делать игры только на Unity или только на Unreal Engine. Сегодня у них игра на одной технологии, а завтра — на другой, или одна команда использует Unreal Engine, а другая Unity или вообще свой кастомный движок. При этом понятно, что разработчикам и компаниям в целом очень не нравится “прыгать” между разными средами разработки. И вот тут-то мы и решили, что, если мы смогли сделать Rider успешным для Unity, то мы можем пойти дальше и сделать его успешным в целом для мира игровой разработки. Так родилась идея Rider как универсальной среды разработки для Game Dev.
Дальнейшее развитие событий довольно очевидно для тех, кто знаком с технологией, на которой построен Rider. Rider состоит из front-end части на базе платформы IntelliJ и back-end части на базе ReSharper. Все языковая поддержка работает на back-end. Поэтому мы просто подключили уже имеющуюся в ReSharper C++ поддержку C++ и Unreal Engine к Rider по той же технологии. Из специфичного пришлось дополнительно реализовать:
Стоит отметить, что сейчас превью Rider for Unreal Engine доступно только на Windows, открывает файлы .sln и полагается на сборку компилятором от Microsoft. В будущем, к моменту релиза, мы постараемся расшириться до всех трех платформ и реализовать поддержку .uproject как основной проектной модели.
Значительная часть разработки игр происходит сейчас на платформе Windows и в рамках тулчейна от Microsoft. Если посмотреть на то, какие инструменты для отладки существуют для кода, который скомпилирован с помощью компилятора Microsoft Visual C++, то мы увидим:
Новый отладчик еще, безусловно, сыроват, в нем пока случаются и существенные проблемы, и замедления. Но мы надеемся довести его до ума к релизу.
Повторю — вся функциональность языковой поддержки [12] из ReSharper C++ теперь доступна в Rider for Unreal Engine Preview. Она включает:
#include директив.

В этом году мы начали работать над поддержкой языка для написания шейдеров HLSL в ReSharper C++ [14], и она сразу попала и в раннее превью Rider for Unreal Engine. Поддержка включает в себя подсветку синтаксиса, тултипы с документацией, подсказки имен параметров и типов, действия навигации, автодополнение, поддержка виртуальных путей файлов, и даже рефакторинги.
Так как в основе Rider for Unreal Engine среда для разработки на .NET, то языковая поддержка работает и в файлах Build.cs, и в Target.cs.
И наконец, если говорить о поддержке языковых диалектов, Rider for Unreal Engine понимает диалекты файлов .uproject/.uplugin, предоставляя опции автодополнения и тултипов документации.

Файлы Blueprints представляют собой данные в бинарном формате, редактирование которых происходит как правило в визуальном редакторе внутри Unreal Editor. Объекты в этих файлах наследуются от классов на C++, переопределяют проперти из C++ части игры. И вот тут Rider for Unreal Engine является той уникальной средой разработки, которая зачитывает все необходимые файлы Blueprints и показывает эти связи в редакторе кода на C++:

При этом, если поменять, например, значение свойства в редакторе Unreal Engine и сохранить asset, то значение тут же автоматически обновится и в Rider (у нас повешены watchers на изменение asset-файлов):

Без сохранения файлов, мы надеемся, это тоже скоро заработает (подготовка к этому сейчас ведется в плагине UnrealLink).
Вызов поиска использований (Find usages) включает не только использования в коде на C++, но и в файлах Blueprints. Двойной клик по таким использованиям открывает Unreal Editor.
Рефлексия в Unreal Engine реализована с помощью специальных макросов (UCLASS, UFUNCTION, UPROPERTY и др). Rider знает, что параметры таких макросов — это не просто текст. Парсер языка C++ в ReSharper C++ и Rider умеет действительно “понимать” значение этих макросов, даже не запуская Unreal Header Build tool (то есть еще до того, как реально сгенерируется содержимое файлов .generated.h).
Кстати, говоря про файлы .generated.h, ReSharper C++ и Rider знают, что автоматически добавляемые пропущенные директивы #include надо вставлять строго до подключения файлов .generated.h. А также учитывают эти генерируемые файлы в рефакторингах переименования.
Возвращаясь к механизму рефлексии, стоит сказать, что спецификаторы рефлексии — это в ReSharper C++ и Rider тоже не просто текст. Для них есть автодополнение и подсказки документации:

Подсказки документации доступны и для самих макросов рефлексии.
А еще анализатор кода проверяет использование макросов рефлексии и указывает на связанные с этим ошибки. Например:
Если рассматривать вызовы удаленных процедур с точки зрения обычного парсера C++, то довольно быстро можно заметить неосведомленность парсера о том, что объявлению функции может соответствовать несколько имлементаций с отличающимися именами (например, суффиксами _Validate и _Implementation). В ReSharper C++/Rider мы обучили парсер идентифицировать RPC по спецификаторам Client, Server и NetMulticast в параметрах макроса UFUNCTION. Благодаря этому:
_Validate и _Implementation или только те из них, которые отсутствуют:
ReSharper C++ и Rider осведомлены об официальных правилах именования [15] в коде Unreal Engine. Эти правила используются средой разработки во всех действиях по работе с кодом, вроде генерации getters и setters или рефакторинге добавления переменной (Introduce Variable). А главное, что существует проверка кода Inconsistent UE4 naming inspections и соответствующее быстрое исправление, которое вызовет рефакторинг Rename и переименует все использования имени, не соответствующего правилам.
Мы довольно давно делаем поддержку разработки на Unreal Engine в ReSharper C++ и, конечно, видим, что производительность редактора является основной жалобой. Rider в силу особенностей архитектуры избавлен от многих проблем с производительностью, которые присутствуют в ReSharper (там они есть отчасти из-за ограничений студии на 32-разрядные процессы, в рамках которых происходит работа ReSharper, но не только).
Помимо этого, мы специально настраиваем работу IDE для улучшения производительности на Unreal Engine. Мы сначала индексируем код пользовательской игры, мгновенно включая все умные действия редактора на пользовательском коде. А индексация уже кода самого движка происходит после этого в фоне. Есть и еще несколько дополнительных опций по управлению индексацией:

В результате, те, кто уже начал пользоваться Rider for Unreal Engine, отзываются о производительности редактора очень положительно! А мы уверены, что можем сделать еще лучше.
Эти и многие другие возможности можно посмотреть в действии в демо-ролике (на английском) от нашего девелопер-адвоката:
А чтобы попробовать эти возможности самостоятельно, достаточно заполнить простую форму и получить от нас письмо со ссылкой на билд и активацию бесплатной лицензии на раннее превью. Переходите, заполняйте [1], пробуйте, пишите отзывы! Для ваших отзывов, как обычно, есть комментарии тут, трекер (ReSharper C++ [16] и Rider [17]) и почта нашей поддержки (rider-cpp-support@jetbrains.com [18]).
Спасибо за внимание!
Команда Rider
The Drive to Develop
Автор: Казакова Анастасия
Источник [19]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/windows/352652
Ссылки в тексте:
[1] Rider for Unreal Engine: https://www.jetbrains.com/lp/rider-unreal/
[2] Еще одна?!: https://www.jetbrains.com/cpp/
[3] CLion: https://www.jetbrains.com/clion/
[4] поддержка Makefiles: https://blog.jetbrains.com/clion/2020/02/dealing-with-makefiles/
[5] ReSharper C++: https://www.jetbrains.com/resharper-cpp
[6] AppCode: https://www.jetbrains.com/objc/
[7] Rider: https://www.jetbrains.com/rider/
[8] Unity: https://www.jetbrains.com/dotnet/promo/unity
[9] Rider Source Code Access: https://www.unrealengine.com/marketplace/en-US/product/rider-source-code-access/
[10] Плагины: https://github.com/JetBrains/UnrealLink
[11] dbgeng.dll: https://docs.microsoft.com/ru-ru/windows-hardware/drivers/debugger/debugger-download-tools
[12] функциональность языковой поддержки: https://www.jetbrains.com/resharper-cpp/features/
[13] инспекций кода: https://www.jetbrains.com/help/resharper/Reference__Code_Inspections_CPP.html#top
[14] ReSharper C++: https://blog.jetbrains.com/rscpp/resharper-cpp-2020-1-eap-hlsl/
[15] официальных правилах именования: https://docs.unrealengine.com/en-us/Programming/Development/CodingStandard
[16] ReSharper C++: https://youtrack.jetbrains.com/issues/RSCPP
[17] Rider: https://youtrack.jetbrains.com/issues/RIDER
[18] rider-cpp-support@jetbrains.com: mailto:rider-cpp-support@jetbrains.com
[19] Источник: https://habr.com/ru/post/500046/?utm_source=habrahabr&utm_medium=rss&utm_campaign=500046
Нажмите здесь для печати.