wake-up-neo.com

Warum fehlt Visual C++ die Refactor-Funktionalität?

Warum werden beim Programmieren in C++ in Visual Studio 2008 keine Funktionen wie im Refactor-Menü angezeigt, wenn C # verwendet wird?

Ich benutze Rename ständig und Sie vermissen es wirklich, wenn es nicht da ist. Ich bin sicher, dass Sie Plugins erhalten können, die dies bieten, aber warum wird es nicht in die IDE integriert, wenn Sie C++ verwenden? Liegt dies daran, dass in C++ C++ analysiert werden muss?

78
xyz

Die Syntax und die Semantik von C++ machen es aus unglaublich schwer um die Refactoring-Funktionalität korrekt zu implementieren. Es ist möglich, etwas relativ einfaches zu implementieren, um 90% der Fälle abzudecken, aber in den verbleibenden 10% der Fälle wird diese einfache Lösung Ihren Code schrecklich beschädigen, indem Sie Dinge ändern, die Sie nie ändern wollten.

Lesen Sie http://yosefk.com/c++fqa/defective.html#defect-8 , um eine kurze Erläuterung der Schwierigkeiten zu finden, mit denen jeder Refactoring-Code in C++ zu tun hat.

Microsoft hat sich offenbar entschieden, dieses spezielle Feature für C++ herauszufinden und Drittentwicklern die Möglichkeit zu geben, das zu tun, was sie können.

70
JSBձոգչ

Ich bin nicht sicher, warum es so ist, aber es gibt Tools von Drittanbietern, die helfen. Zum Beispiel evaluiere ich gerade Visual Assist X (von Whole Tomato). Wir verwenden auch Visual Studio 2005.

11
Brian

devexpress bietet Add-In Refactor! für C++ für VS2005 und VS2008.

5
mem64k

Fühlen Sie sich nicht schwer, es ist auch nicht in VB.Net verfügbar :)

C++ ist eine harte Sprache, die verglichen mit C # zu analysieren ist (VB auch, wenn Sie "Option Explicit" und "Option Strict" nicht aktiviert haben. Es ist schwierig zu erkennen, was eine Codezeile aus einem viel größeren Kontext macht).

Vermutlich könnte es etwas mit der "Schwierigkeit" der Bereitstellung zu tun haben.

P.S. Ich habe meine Antwort als Community-Wiki markiert, weil ich weiß, dass es keine nützlichen Informationen enthält.

4
Binary Worrier

Eclipse führt einige C++ - Refactorings aus, einschließlich "Rename". Schauen Sie sich diese Frage hier auf StackOverflow an.

Es ist auch möglich, Microsoft Compiler mit Eclipse zu verwenden. Check out hier .

Probieren Sie Eclipse aus und sehen Sie, ob es zu Ihnen passt.

4
fukanchik

Es gibt viel Fud und Verwirrung um dieses Thema. Dieses erstaunliche Youtube-Video sollte klären, warum C++ Refactoring schwer ist: https://www.youtube.com/watch?v=mVbDzTM21BQ

dr. Google ändert seine gesamte C++ - Codebasis mit 100 Millionen Zeilen, indem ein Compiler (Clang + LLVM) verwendet wird, der Zugriff auf das Zwischenformat ermöglicht.

Unterm Strich sind hier Dritte dran, es gibt keinen realistischen Weg, um VS C++ umzuwandeln, es sei denn, MS liefert Zwischenergebnisse auf die gleiche Weise. Wenn Sie es aus der Perspektive des Programmierens betrachten, ist dies offensichtlich: Um VS C++ umzuwandeln, müssen Sie C++ auf die gleiche Weise kompilieren können wie VS mit den gleichen Fehlern, Einschränkungen, Fehlern, Hacks, Abkürzungen, Problemumgehungen usw. Die üblichen Verdächtigen wie Coderush und Resharper haben nicht das Budget für diese Art von Wahnsinn, obwohl sie sich anscheinend bemühen, aber es hat Jahre gedauert ...

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

Update 2016: Resharper macht jetzt einen ordentlichen Job bei C++ Refactor. Einschränkungen gelten nur für große/gigantische Projekte.

3
Dirk Bester

MS hat dies schließlich getan: https://channel9.msdn.com/Shows/C9-GoingNative/GoingNative-33-C-Refactoring-in-Visual-Studio-2015#time=04m37s

Sie haben vor etwa 10 Jahren damit angefangen, ich erinnere mich, dass ich ms channel9 vor langer Zeit gesehen habe.

2

Ich verwende Visual Assist X mit Visual Studio seit etwa eineinhalb Jahren. Es ist ein unglaubliches Tool, das Sie mit normalem C++ - Code sehr unterstützt, aber mit vorgefertigtem Code nicht sehr gut funktioniert. Wenn Sie beispielsweise über ein ausgefeiltes richtlinienbasiertes Vorlagen-Design verfügen, wissen Sie nicht, wie Sie Ihre Variablen umbenennen, und das Projekt wird nicht mehr kompiliert.

1
Liviu

Installieren Sie das Plugin, das Ihnen diese Funktionalität ermöglicht: https://visualstudiogallery.msdn.Microsoft.com/164904b2-3b47-417f-9b6b-fdd35757d194

0
support_ms

Ich möchte darauf hinweisen, dass Qt Creator (ein C++ IDE, das mit VC++ - Bibliotheken und Buildsystem kompatibel ist) eine Symbolumbenennung bietet, die sehr gut funktioniert:

Sie können Symbole in allen Dateien eines Projekts umbenennen. Wenn Sie eine Klasse umbenennen, können Sie auch Dateinamen ändern, die dem Klassennamen entsprechen.

Qt Creator - Refactoring: Umbenennen von Symbolen

Mit der Umbenennungsfunktion von Qt Creator erhalten Sie eine Liste der gefundenen Symbolreferenzen und die Möglichkeit, diese auszuschließen, bevor Sie das Ersetzen durchführen. Wenn also eine Symbolreferenz falsch angezeigt wird, können Sie sie ausschließen.

 Qt Creator Refactor Replace

So ist die Umbenennung von C++ - Symbolen möglich. Als ich von Qt Creator zu VS komme, spüre ich Ihren Schmerz bis zu dem Punkt, an dem ich darüber nachgedacht hatte, bereits vorhandene VS-Projekte von beträchtlicher Größe zu konvertieren, stattdessen Qt Creator zu verwenden.

Ich glaube nicht, dass dies in C++ besonders schwer ist. Zusätzlich zu der Tatsache, dass es in Qt Creator bereits sehr gut funktioniert, gibt es die Tatsache, dass der Compiler und der Linker Symbole finden und zuordnen können: Wenn dies nicht möglich ist, können Sie Ihre Anwendung nicht erstellen.

In der Tat haben auch dynamisch typisierte Sprachen wie Python Werkzeuge zum Umbenennen. Wenn Sie ein solches Tool für eine Sprache erstellen können, in der keine expliziten Verweise auf den Variablentyp vorhanden sind, können Sie dies definitiv für C++ tun.

Fallbeispiel:

... Rope, eine Python-Refactoring-Bibliothek ... Ich habe es für ein paar Umbenennungen versucht, und das hat definitiv wie erwartet funktioniert.

Stack Overflow - Welche Refactoring-Tools verwenden Sie für Python?

0
Terrabits