Warum gibt es bei der Programmierung in C ++ in Visual Studio 2008 bei Verwendung von C # keine Funktionen wie diese im Refactor-Menü?
Ich benutze Rename ständig und du vermisst es wirklich, wenn es nicht da ist. Ich bin sicher, dass Sie Plugins erhalten können, die dies bieten, aber warum ist es bei Verwendung von C ++ nicht in die IDE integriert? Liegt das an einem Gotcha in der Art und Weise, wie C ++ analysiert werden muss?
Rename all
Art Funktionalität wie die in Xcode C ++ hinzufügen .Antworten:
Die Syntax und Semantik von C ++ machen es unglaublich schwierig , 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 ändert, die Sie nie ändern wollten.
Unter http://yosefk.com/c++fqa/defective.html#defect-8 finden Sie eine kurze Beschreibung der Schwierigkeiten, mit denen Refactoring-Code in C ++ zu kämpfen hat.
Microsoft hat offenbar beschlossen, diese spezielle Funktion für C ++ zu nutzen, und es den Entwicklern von Drittanbietern überlassen, das zu tun, was sie können.
quelle
Ich bin mir nicht sicher, warum das 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.
quelle
devexpress bietet Add-In Refactor! für C ++ für VS2005 und VS2008.
quelle
Fühlen Sie sich nicht schwer getan, es ist auch nicht in VB.Net verfügbar :)
C ++ ist eine HARD-Sprache, die im Vergleich zu C # analysiert werden muss (VB ist auch schwierig zu sagen, was eine Codezeile in einem VIEL größeren Kontext tut, wenn Sie nicht "Option Explicit" und "Option Strict" aktiviert haben).
Vermutlich könnte es etwas mit der "Schwierigkeit" zu tun haben, es bereitzustellen.
PS Ich habe meine Antwort als Community-Wiki markiert, weil ich weiß, dass sie keine nützlichen Informationen enthält.
quelle
Eclipse führt nur wenige C ++ - Refactorings durch, einschließlich 'Umbenennen'. Schauen Sie sich diese Frage hier auf StackOverflow an.
Es ist auch möglich, Microsoft Compiler mit Eclipse zu verwenden. Schauen Sie sich hier .
Probieren Sie Eclipse aus und prüfen Sie, ob es zu Ihnen passt.
quelle
Es gibt viel Fud und Verwirrung um dieses Thema. Dieses erstaunliche Youtube-Video sollte klarstellen, warum C ++ - Refactoring schwierig ist: https://www.youtube.com/watch?v=mVbDzTM21BQ
tl; dr Google überarbeitet die gesamte C ++ - Codebasis mit 100 Millionen Zeilen mithilfe eines Compilers (Clang + LLVM), der den Zugriff auf das Zwischenformat ermöglicht.
Unterm Strich werden hier Dritte geschraubt, es gibt keine realistische Möglichkeit für sie, VS C ++ umzugestalten, es sei denn, MS gibt Zwischenergebnisse auf die gleiche Weise aus. Wenn Sie es aus der Perspektive des Programmierproblems betrachten, ist dies offensichtlich: Um VS C ++ umzugestalten, müssen Sie in der Lage sein, C ++ genau so zu kompilieren, wie VS es mit denselben Fehlern, Einschränkungen, Fehlern, Hacks, Verknüpfungen, Problemumgehungen usw. Die üblichen Verdächtigen wie Coderush und Resharper haben nicht das Budget für diese Art von Wahnsinn, obwohl sie es anscheinend versuchen, aber es sind Jahre vergangen ...
http://www.jetbrains.com/resharper-cpp/
Update 2016: Resharper leistet jetzt gute Arbeit bei C ++ refactor. Einschränkungen gelten ausschließlich für große / gigantische Projekte.
quelle
MS hat dies endlich getan: https://channel9.msdn.com/Shows/C9-GoingNative/GoingNative-33-C-Refactoring-in-Visual-Studio-2015#time=04m37s
Sie haben vor ungefähr 10 Jahren damit begonnen. Ich erinnere mich, dass ich ms channel9 vor langer Zeit gesehen habe.
quelle
Ich benutze Visual Assist X mit Visual Studio seit ungefähr anderthalb Jahren. Es ist ein unglaubliches Tool, das Ihnen bei normalem C ++ - Code sehr hilft, aber bei Vorlagencode nicht sehr gut funktioniert. Wenn Sie beispielsweise über ein ausgeklügeltes richtlinienbasiertes Vorlagendesign verfügen, kann es Ihre Variablen nicht umbenennen, und das Projekt wird nicht mehr kompiliert.
quelle
Installieren Sie das Plugin, das Ihnen diese Funktionalität ermöglicht: https://visualstudiogallery.msdn.microsoft.com/164904b2-3b47-417f-9b6b-fdd35757d194
quelle
Ich möchte darauf hinweisen, dass Qt Creator (eine C ++ - IDE, die mit VC ++ - Bibliotheken und Buildsystemen kompatibel ist) eine Symbolumbenennung bietet, die sehr gut funktioniert:
Qt Creator - Refactoring: Symbole umbenennen
Die Umbenennungsfunktion von Qt Creator bietet Ihnen eine Liste der gefundenen Symbolreferenzen und die Möglichkeit, diese auszuschließen, bevor Sie das Ersetzen durchführen. Wenn also eine Symbolreferenz falsch ist, können Sie sie ausschließen.
Das Umbenennen von C ++ - Symbolen ist also möglich. Wenn ich von Qt Creator zu VS komme, spüre ich Ihren Schmerz bis zu dem Punkt, an dem ich darüber nachgedacht habe, bereits vorhandene VS-Projekte von beträchtlicher Größe auf die Verwendung von Qt Creator umzustellen.
Ich kaufe mir nicht das Argument, dass dies in C ++ besonders schwierig 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 abgleichen können: Wenn dies nicht möglich wäre, könnten Sie Ihre Anwendung nicht erstellen.
In der Tat haben Sprachen wie Python, die dynamisch typisiert werden, auch Umbenennungswerkzeuge. Wenn Sie ein solches Tool für eine Sprache erstellen können, in der es keine expliziten Verweise auf den Variablentyp gibt, können Sie dies definitiv für C ++ tun.
Ein typisches Beispiel:
Stapelüberlauf - Welche Refactoring-Tools verwenden Sie für Python?
quelle
Trotz der Kommentare aller Experten bin ich völlig anderer Meinung, dass das Problem der Refactoring-Unterstützung etwas mit der C ++ - Sprachsemantik oder einer anderen Sprachsemantik zu tun hat. Außer der Compiler-Builder selbst entscheidet sich aus eigenen Gründen oder Einschränkungen nicht dafür, einen im ersten Fall zu implementieren.
Und Beleidigung nicht zu nehmen, aber es tut mir leid zu sagen, Herr jsb, der obige Link, den Sie zur Unterstützung Ihres Falls (dh von yosefk) über C ++ - Defekte bereitgestellt haben, kommt überhaupt nicht in Frage. Es ist eher so, als würden Sie "Los Angeles" Anweisungen geben, wenn jemand nach "San Franisco" fragt.
Meiner Meinung nach ist das Problem der Refactoring-Schwierigkeit für eine bestimmte Sprache eher so, als würde man einen Finger auf die Sprachintegrität selbst legen. Besonders für Sprachen, die manchmal nur Schmerzen bereiten ... wenn es um die Deklaration und Verwendung von Variablen geht. :) Okay! Sag mir, warum verlierst du den Überblick über einen Knoten in einem Knotenbaum ... wie? Was es also mit jeder Sprache macht, sei es so einfach wie Code auf Maschinenebene. Sie wissen, dass Ihr VS-Compiler leicht erkennen kann, ob eine Variable oder Routine toter Code ist. Verstanden?
Informationen zur Entwicklung von Tools von Drittanbietern. Ich denke, Compiler-Anbieter können es viel einfacher und effektiver implementieren, wenn sie jemals ein Drittanbieter-Tool benötigen, das die gesamte Parsing-Datenbank duplizieren muss, um damit umzugehen. Heutzutage kann der Compiler Code auf Maschinencodeebene sehr effizient optimieren, und ich höre hier, dass es schwierig ist zu sagen, wie eine Variable zuvor verwendet wurde. Ich nehme an, Sie haben der inneren Arbeitsweise des Compilers keine wirkliche Aufmerksamkeit geschenkt. In welcher Datenbank wird es aufbewahrt?
Und sicher ist es die gleiche Datenbank, die IDE für all diese ähnlichen Zwecke verwendet. In der Vergangenheit war der Compiler nur eine separate Entität und die IDE nur ein Texteditor mit einer gewissen Spezialisierung. Mit der Zeit wird die Lücke zwischen Compiler und IDE-Editor jedoch kleiner und es wird direkt mit der Arbeit an einer ähnlich analysierten Datenbank begonnen. Dies ermöglicht es, all diese Intellisense- und Refactoring- oder andere syntaxbezogene Probleme effektiver zu behandeln. Bei allen vorkompilierten Dingen und JIT ist das Kompilieren dieser Lücke fast fahrlässig. Daher ist es fast sinnvoll, dieselbe Datenbank für beide Zwecke zu verwenden, da sonst Ihr Speicherbedarf aufgrund von Duplikaten steigt.
Sie alle sind Programmierer - ich nicht! Und ihr scheint Schwierigkeiten zu haben, zu visualisieren, wie Refactoring für C ++ oder eine andere Sprache implementiert werden kann, die ich nicht verstehen kann. Es geht nur um etwas, für das man sich mehr Mühe geben muss, je nachdem, wie schwer eine Person ist, die man schiebt.
Auf jeden Fall VS eine nette IDE, besonders wenn es um C # geht.
quelle