![Новости о R# из первых рук: интервью с Сергеем Шкредовым Новости о R# из первых рук: интервью с Сергеем Шкредовым](/storage/images/84/20/67/83/derived/89ef5146d18f98fa5d1cb7733f4a6f8a.jpg)
Уверен очень многие .Net-разработчики знают и уважают известное расширение для MS Visual Studio – ReSharper (R#). Этот продукт, созданный питерской софтверной фирмой JetBrains, сумел получить воистину мировое признание. В конце минувшего года вышла его седьмая версия, которая помимо всего прочего обеспечивает полную поддержку новой Visual Studio 2012, при этом сохраняя совместимость со старыми версиями VS. Второй важной особенностью нового ReSharper 7 стала поддержка приложений для Windows 8 и WinRT.
Вслед за 7-мой версией вскоре последовало обновление 7.1, которое привнесло огромное количество улучшений и доработок (более подробно с которыми лучше ознакомиться отдельно здесь и здесь). В связи с выходом этого важного мажорного релиза Resharper мы решили побеседовать с Сергеем Шкредовым, product manager’ом JetBrains, чтобы из “первых рук” узнать все последние новости и ближайшие перспективы в развитии этого сверхпопулярного отечественного инструмента.
Несмотря на то, что большинство наших читателей не только знают что такое ReSharper, но и активно используют его в своей работе, давайте кратко поясним всем остальным, что же такое ReSharper сегодня? Очень кратко – каковы его основные возможности?
Никогда не мог дать короткий ответ на такой вопрос.
Если утверждать, что ReSharper - это просто плагин к Microsoft Visual Studio, то это не совсем так, так как на платформе ReSharper построен декомпилятор dotPeek, также как существует ReSharper command line tool для запуска анализа кода на сервере (сейчас только на TeamCity).
С другой стороны рассматривать ReSharper как полноценную IDE тоже пока нельзя, так как у нас нет, например, дебаггера или поддержки систем контроля версий. Из основных возможностей ReSharper я бы выделил прежде всего: анализ кода, рефакторинги, интеллисенс, навигацию и поддержку unit testing, и все это - для более 12 языков.
Я знаю, что недавно у вас вышел новый мажорный релиз, в котором сделано очень много нового. Что, по вашему мнению, будет наиболее интересным и важным в нём для типичного .Net-программиста?
Для нас в новом ReSharper 7 было несколько вещей, которые мы не могли оставить без внимания. Для поддержки асинхронной загрузки проектов, нам пришлось переработать асинхронную инициализацию самого нашего продукта, и результат меня лично радует. Мы полностью стартуем нашу модель кода еще до того, как все проекты (а у нас их более 300) успевают загрузиться. Так же хочу отметить огромную работу по поддержке новых цветовых схем. Только иконок прошлось перерисовать более 800.
С новой платформой WinRT тоже все было непросто. Первое, с чем пришлось столкнуться - это ссылки из проектов на SDK. Теперь в зависимостях проекта могут оказаться не только другие проекты и сборки, но и, например, файлы на языке JavaScript. Эти файлы необходимо индексировать и открывать в редакторе при навигации. Несмотря на то, что формат метаданных WinRT-сборок такой же, как и для CLR-сборок, для обращения к ним из .Net необходимо проецировать типы (например, Vector в IList). А при обращении к WinRT-компоненте, написанной на C# из WinJS приложения, конвертировать всё надо в обратную сторону и строить проекции имен (в JavaScript вызываемые методы будут начинаться с маленькой буквы).
Конечно, перечислить все новшества здесь просто невозможно, но именно для .Net программистов я бы в первую очередь порекомендовал почитать про наши новые контрактные аннотации. Это обобщение nullness и assertion аннотаций, которые позволяют, например, описать зависимость значения out-параметра метода TryGetValue (key, out value) от возвращаемого значения. Очень сильная вещь, посмотреть можно здесь.
Кстати говоря, насколько я понял, в последний ReSharper вы интегрировали свой самый последний dotTrace из 5-ой ветки, можно немного рассказать о его возможностях и новшествах?
Сейчас в последнем ReSharper 7 интегрируются два наших продукта - это dotTrace и dotCover. Интеграция dotTrace заключается в возможности профилировать тесты и start-up проект, а вот интеграция dotCover гораздо более глубокая, он может использовать ReSharper’s Unit tests runner и обладает знаниями о код-модели.
Рассказ о каждом из этих продуктов может быть очень долгим, как и для других продуктов JetBrains. Поэтому скажу лишь, что Вы можете в течение 10 дней бесплатно использовать полноценную версию каждого из них и посмотреть, насколько эти инструменты подходят именно для Ваших нужд. И даже если что-то не так – всегда можно написать нам отзыв, мы это очень ценим.
Можете поделиться с нами, каких успехов достиг Resharper (в том числе и коммерческих)? Какова динамика его развития?
Об успехах ReSharper я мог бы говорить бесконечно. Главный успех, или даже ключ к успеху ReSharper - это команда, которая над ним работает, команда профессиональных, неординарных и заинтересованных людей, с которой можно не сомневаться в успехе.
ReSharper покупают активно и много. И с каждым годом покупают все больше. Мы работаем над тем, чтобы программирование с ReSharper было доступно каждому. Например, для выявления performance-проблем мы встроили в ReSharper профилятор, и наши пользователи одной кнопкой могут сделать снэпшот того, что происходит с производительностью именно на их конфигурации.
Также не могу не отметить, что у нас очень сильная команда тестирования. Конечно, EAP-программа по-прежнему очень важна для нас, но мы работает над тем, чтобы даже EAP-пользователи получали продукт очень высокого качества. Тогу поделиться, что в EAP-программе для последнего ReSharper 7 участвовало более 10 тысяч пользователей. В ReSharper сейчас более 35 тысяч unit-тестов и более 600 integration-тестов, запускающих фичи в живой Visual Studio. Сейчас мы работаем над автоматизацией тестирования производительности, и я надеюсь, что когда-нибудь мы сможем поделиться наработками в этой области с нашими пользователями.
Существует мнение, что 90 процентов пользователей используют лишь 10 процентов функциональности ReSharper. Отчасти это подтверждается нашими данными из статистики использования ReSharper. Увеличение discoverability является сейчас одним из приоритетов развития продукта. Мы действительно хотим, чтобы наши пользователи использовали ReSharper на 100%)
В ReSharper только для C# больше 1000 контекстных подсказок и предложений по улучшению и автоматическому рефакторингу кода. ReSharper может составить конкуренцию компилятору C# в соответствии спецификации. Ну и для всех проблем, с которыми мы сталкиваемся в процессе разработки мы придумываем решения, которые
закладываем в продукт, так что в итоге и работа идет и удовольствие получается.
Я знаю, что вы очень плотно взаимодействуете в своей работе с Microsoft, можете рассказать про ваше сотрудничество?
Не могу рассказать тут много в силу NDA, но с Microsoft мы работаем. В процессе разработки ReSharper 7 мы взаимодействовали очень тесно. Конечно, мы сталкиваемся с проблемами во многих аспектах взаимодействия с Visual Studio. Основная проблема тут, наверное, в том, что extensibility-интерфейсы в VS в основном ориентированы на рост IDE именно вширь.
Сейчас в VS всё сделано так, что здесь легко завести новую проектную систему или реализовывать Language Service для нового языка. Нам же, напротив, часто надо перекрывать существующую функциональность. Иногда простых способов это сделать - просто нет. В качестве примера приведу такой факт: функциональность, отключающая IntelliSense VS когда активен наш, реализована с помощью более 50 классов.
Если говорить откровенно, несмотря на объективно очень интересный продукт, самое больное место ReSharper по моему мнению – это его тормоза. Чтобы не казаться голословным, позвольте несколько типичных примеров.
Чаще всего тормоза VS с активированным ReSharper проявляются при большом количестве открытых вкладок (утечки памяти, вероятно), также иногда выскакивает ”ошибка компиляции проекта”, которая почти всегда исчезает после банального перезапуска всей Студии. И, кстати говоря, по моему субъективному мнению именно у 7 версии ”ошибка компиляции” стала весьма навязчивой. Что вы может сказать по этой острой теме, что предпринимается для устранения этих багов и повышения надежности работы?
Тут Вы совершенно правы, производительность традиционно является причиной номер один по которой пользователи отказываются от ReSharper. Точнее, я бы говорил не про производительность вообще, а именно про тормоза, долгое открытие файлов и проектов, задержки при быстрой печати или зависание UI при построении проекта.
Тут можно долго рассуждать о природе этих задержек. Первый большой источник проблем - это архитектура самой Visual Studio, построенная на COM-объектах работающих только в UI-потоке. Например, нам приходится полностью дублировать всю проектную модель Студии, чтобы иметь возможность обращаться к ней из разных потоков. На каждом старте нам все равно приходится производить синхронизацию.
Кроме того мы разбиваем долгие активности в UI-потоке, чтобы не блокировать пользовательский ввод. Есть много проблем связанных со сборкой мусора во 2-ом поколении. Этот процесс может быть довольно долгим, особенно если объем занятой managed-памяти приближается к гигабайту. Тут единственное решение - это создавать меньше объектов, и мы постоянно занимаемся мониторингом memory traffic. Бывает, что совершенно безобидные конструкции языка C# могут порождать буквально сотни мегабайт объектов замыкания или boxed-структур.
Что касается общего объема потребляемой памяти, то, несмотря на то, что студия остается 32-битным процессом, реальный объем адресуемой памяти для нашего процесса в Windows 7 достигает 3 гигабайт и проблема “Out Of Memory”, которую помнят, наверное, все наши пользователи с XP, постепенно уходит в прошлое. Но в любом случае, оптимизация потребления памяти приоритетна для нас, прямо сейчас мы работаем над тем, чтобы не держать в памяти большинство индексов нашей код-модели. Что касается ошибок компиляции, то мы обязательно исправляем все проблемы, о которых наши пользователи сообщают нам. Разве что кроме тех, которые мы не можем исправить из-за принципиальных проблем архитектуры.
Кстати, одну из таких проблем мы сейчас и решаем, она связана с разным подходом к резолву ссылок на сборки у ReSharper и у компилятора и проявляется при наличии проектов с разными версиями рантайма.
Завершая эту тему порцией здоровой самокритики - какие самые слабые стороны вы сами видите в ReSharper, какие вызовы беспокоят вас прямо сейчас?
Одна из самых слабых сторон - это то, что нам уже почти 10 лет. И проект уже становится несколько неповоротлив, нам приходится значительную часть времени уделять рефакторингу подсистем в которых, с течением времени, накопилось много скрытых зависимостей, переписывать и переосмысливать такие модули для того, чтобы иметь возможность быстро делать там изменения, когда этого потребует очередная версия Visual Studio.
Есть у нас проблемы и с изменениями API, которые не очень просто переживают наши уже не такие редкие, как несколько лет назад, плагинописатели. Несмотря на то, что ReSharper изначально создавался расширяемым, практически все подсистемы были созданы для поддержки CLR-языков, а общая функциональность ядра во многом ориентирована на решение сложностей взаимодействия с Visual Studio и поэтому подвергается частым изменениям. Сейчас мы уделяем особое внимание консистентности API, что должно позволить большему числу пользователей использовать ReSharper как платформу для решения своих бизнес задач.
В заключение нашего интервью, расскажите, пожалуйста, о возможных скидках, которые доступны для ваших новых потенциальных пользователей. Насколько я знаю, у вас достаточно гибкая политика в этом плане.
В первую очередь, я бы хотел упомянуть про персональные лицензии, как наиболее распространенный и доступный тип лицензий. Если Вы используете ReSharper как индивидуальный разработчик, или просто хотите на свои деньги купить лицензию и индивидуально использовать ее на своей работе, то персональная лицензия Вам подходит идеально, причем ее стоимость начинается от 150$ за C# edition, который ограничен лишь отсутствием поддержки VB.Net.
И конечно, если вы MVP, студент, тренер или занимаетесь OpenSource-проектом, то получить такую лицензию Вы можете бесплатно. Кроме того, практически круглый год (где-то 8 из 12 месяцев) у нас открыта программа EAP для очередной версии ReSharper. EAP-билд также можно использовать совершенно бесплатно в течение месяца, после чего необходимо просто скачать и установить новый билд.
Иногда мы проводим акции. В частности совсем недавно, в конце декабря, у нас была совершенно фееричная распродажа, и я поздравляю всех, кто успел купить ReSharper и другие наши продукты по чисто символической цене!
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.