Подтвердить что ты не робот

Почему Visual С++ не имеет функциональности рефакторинга?

При программировании на С++ в Visual Studio 2008, почему нет функции, подобной той, что видна в меню рефакторинга при использовании С#?

Я использую Переименовать постоянно, и вы действительно скучаете по нему, когда его там нет. Я уверен, вы можете получить плагины, которые предлагают это, но почему он не интегрирован в среду IDE при использовании С++? Это связано с некоторыми результатами в том, что С++ должен быть проанализирован?

4b9b3361

Ответ 1

Синтаксис и семантика С++ делают его невероятно трудным для правильной реализации функций рефакторинга. Возможно реализовать что-то относительно простое, чтобы охватить 90% случаев, но в оставшихся 10% случаев простое решение будет ужасно нарушать ваш код, изменяя вещи, которые вы никогда не хотели изменять.

Прочитайте http://yosefk.com/c++fqa/defective.html#defect-8 для краткого обсуждения трудностей, с которыми приходится иметь дело с любым кодом рефакторинга на С++.

Microsoft, очевидно, решила использовать эту особенность для С++, оставив ее сторонним разработчикам, чтобы сделать все возможное.

Ответ 2

Я не уверен, почему это так, но сторонние инструменты существуют, которые помогают. Например, прямо сейчас я оцениваю Visual Assist X (целым томатом). Мы также используем Visual Studio 2005.

Ответ 4

Не чувствуйте себя прочным, он не доступен в VB.Net:)

С++ - это жесткий язык для синтаксического анализа по сравнению с С# (VB тоже, если вы не включили "Option Explicit" и "Option Strict", трудно точно сказать, что делает любая строка кода из более крупного контекста MUCH).

Угадав, что это может быть связано с "трудностью" ее предоставления.

P.S. Я отметил свой ответ как вики сообщества, потому что я знаю, что он не предоставляет никакой полезной информации.

Ответ 5

Eclipse делает несколько рефакторингов С++, включая "переименование". Посмотрите question здесь на StackOverflow.

Также возможно использовать компилятор Microsoft с Eclipse. Ознакомьтесь с здесь.

Попробуйте Eclipse и посмотрите, подходит ли оно вам.

Ответ 6

В этом вопросе много путаницы и путаницы. Это потрясающее видео на YouTube должно прояснить, почему рефакторинг С++ затруднен: https://www.youtube.com/watch?v=mVbDzTM21BQ

tl; dr Google реорганизует всю свою 100-миллионную строку С++ codebase с помощью компилятора (Clang + LLVM), который позволяет получить доступ к его промежуточному формату.

Нижняя линия, третьи стороны прикручены здесь, нет реалистичного способа рефакторинга VS С++, если MS не выводит промежуточные результаты одинаково. Если вы думаете об этом с точки зрения проблемы программирования, это очевидно: для реорганизации VS С++ вы должны иметь возможность компилировать С++ точно так же, как VS делает с теми же ошибками, ограничениями, недостатками, хаками, ярлыками, обходными решениями и т.д. Обычные подозреваемые, такие как Coderush и Resharper, не имеют бюджета для такого рода безумия, хотя, по-видимому, они пытаются, но это были годы...

http://www.jetbrains.com/resharper-cpp/

Обновление 2016: Resharper теперь выполняет достойную работу в рефакторе С++. Ограничения предназначены исключительно для крупных/гигантских проектов.

Ответ 8

Я использовал Visual Assist X с визуальной студией около полутора лет. Это невероятный инструмент, который очень помогает вам с обычным кодом на С++, но он не очень хорошо работает с шаблоном кода. Например, если у вас есть сложный шаблонный шаблон, он не будет знать, как переименовать ваши переменные, и проект больше не будет компилироваться.

Ответ 10

Хорошо, несмотря на комментарии всех ваших экспертов, я совершенно не согласен с тем, что проблема поддержки рефакторинга имеет какое-то отношение к семантике языка С++ или любой языковой семантике. За исключением того, что сами компилятор не выбирает реализацию в первом случае из-за своих собственных причин или ограничений, что бы они ни были.

И преступление не нужно принимать, но я сожалею, что г-н jsb вышеупомянутая ссылка, которую вы предоставили для поддержки вашего дела (например, yosefk) о дефекте С++, не может быть и речи. Его больше похоже на то, что вы даете направление "Лос-ангелам", когда кто-то попросил "Сан-Франциско".

По моему мнению, проблема рефинансирования проблемы рефакторинга для определенного языка больше походит на то, чтобы поднять руку на целостность языка. Особенно для языков, которые иногда являются просто болью.... когда дело доходит до их объявления переменных и использования.:) Хорошо! скажите, как вы потеряли трек какого-то node в дереве node... а? Так что он делает с любым языком, так это просто, как код машинного уровня. Вы знаете, что VS-компилятор может легко определить, является ли какая-либо переменная или рутина мертвым кодом. Получил мой вопрос?

О разработке стороннего инструмента. Я думаю, что поставщики компиляторов могут реализовать его гораздо легче и эффективнее, если они когда-либо захотят использовать сторонний инструмент, который должен будет дублировать всю базу данных синтаксического анализа для ее обработки. В настоящее время компилятор может очень эффективно оптимизировать код на уровне машинного кода, и я слышу здесь, что его трудно сказать, как некоторая переменная используется ранее. Я полагаю, вы не обратили никакого реального внимания на внутреннюю работу компилятора. В какой базе данных она хранится.

И убедитесь, что его почти такая же база данных, что IDE используется для всех подобных целей. В предыдущий момент компилятор был всего лишь отдельной сущностью, а IDE - текстовым редактором с некоторой специализацией, но по мере того, как разрыв между компилятором и редактором IDE становится меньше, и он сразу же начал работать над подобной анализируемой базой данных. Это позволяет более эффективно обрабатывать все эти вопросы, связанные с intellisense и рефакторингом, или другие связанные с синтаксисом проблемы. Со всеми пресобыми вещами и JIT-компиляцией этот разрыв почти небрежен. Поэтому почти разумно использовать одну и ту же базу данных для обеих целей, или же потребность в памяти повышается из-за дублирования.

Вы все программисты - я нет! И вам, ребята, кажется, трудно понять, как рефакторинг может быть реализован для С++ или любого языка, который я не могу понять. Его просто все о чем-то, что вы должны приложить больше усилий для некоторых меньше в зависимости от того, насколько тяжелый человек, которого вы пытаетесь нажать.

Во всяком случае VS хорошая идея IDE, особенно когда дело доходит до С#.