Dlaczego Visual C++ nie posiada funkcji refactor?

Podczas programowania w C++ w Visual Studio 2008, dlaczego nie ma takiej funkcjonalności w menu refactor przy użyciu C#?

Używam zmieniam nazwę stale i naprawdę tęsknisz za tym, gdy go nie ma. Jestem pewien, że można uzyskać wtyczki, które oferują to, ale dlaczego nie jest zintegrowany z IDE podczas korzystania z C++? Czy jest to spowodowane tym, że C++ musi być parsowane?

Author: xyz, 2008-12-12

11 answers

Składnia i semantyka C++ sprawiają, że niezwykle trudno poprawnie zaimplementować funkcję refaktoryzacji. Możliwe jest zaimplementowanie czegoś stosunkowo prostego, aby pokryć 90% przypadków, ale w pozostałych 10% przypadków to proste rozwiązanie strasznie złamie twój kod, zmieniając rzeczy, których nigdy nie chciałeś zmienić.

Czytaj http://yosefk.com/c++fqa / defective. html # defective-8 dla krótkiej dyskusji o trudnościach, jakie ma każdy refaktoryzujący kod w C++ żeby sobie z tym poradzić.

Microsoft najwyraźniej zdecydował się rzucić okiem na tę konkretną funkcję dla C++, pozostawiając to zewnętrznym programistom, którzy zrobią, co mogą.

 70
Author: JSBձոգչ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-12 16:50:10

Nie jestem pewien, dlaczego tak jest, ale istnieją narzędzia innych firm, które pomagają. Na przykład, teraz oceniam Visual Assist X (przez cały pomidor). Korzystamy również z Visual Studio 2005.

 11
Author: Brian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-12 16:40:57

Devexpress dostarcza Add-in Refactor! dla C++ dla VS2005 i VS2008.

 5
Author: mem64k,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-18 19:20:52

Don ' t feel hard-done-by, nie jest dostępny w VB.Net albo:)

C++ jest trudnym językiem do analizy w porównaniu z C# (VB też chyba, że masz włączone "Option Explicit" i "Option Strict", trudno jest dokładnie określić, co robi każda linia kodu w znacznie większym kontekście).

Domyślam się, że może mieć to coś wspólnego z" trudnością " jej dostarczenia.

P. S. zaznaczyłem swoją odpowiedź jako community wiki, bo wiem, że nie dostarcza żadnych użytecznych informacje.

 4
Author: Binary Worrier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-12 16:43:15

Eclipse wykonuje kilka refaktoringów c++, w tym 'rename'. Sprawdź to Pytanie tutaj na StackOverflow.

Możliwe jest również użycie kompilatora Microsoft z Eclipse. Sprawdź tutaj .

Spróbuj Eclipse i sprawdź, czy pasuje do ciebie.

 4
Author: fukanchik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:52:58

Wokół tej kwestii jest dużo fud i zamieszania. Ten niesamowity filmik na youtube powinien wyjaśnić dlaczego refaktoryzacja C++ jest trudna: https://www.youtube.com/watch?v=mVbDzTM21BQ

TL; dr Google refaktors ich całe 100 milionów linii kodu C++ za pomocą kompilatora (clang + LLVM), który umożliwia dostęp do jego pośredniego formatu.

Reasumując, osoby trzecie są tu wkręcone, nie ma realnego sposobu na refactor VS C++, chyba że MS wyprowadzi pośrednie wyniki w ten sam sposób. Jeśli myślisz o tym z perspektywy problemów programistycznych, jest to oczywiste: aby refactor VS C++ , musisz być w stanie skompilować C++ dokładnie tak samo jak VS z tymi samymi błędami, ograniczeniami, wadami, hackami, skrótami, obejściami itp. Zwykli podejrzani, tacy jak Coderush i Resharper, nie mają budżetu na tego rodzaju szaleństwo, chociaż najwyraźniej próbują, ale minęły lata...

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

Aktualizacja 2016: Resharper wykonuje teraz przyzwoitą pracę w C++ refactor. Ograniczenia dotyczą wyłącznie dużych / gigantycznych projektów.

 3
Author: Dirk Bester,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-15 06:19:38

MS wreszcie zrobił to: https://channel9.msdn.com/Shows/C9-GoingNative/GoingNative-33-C-Refactoring-in-Visual-Studio-2015#time=04m37s

Zaczęli to robić jakieś 10 lat temu, pamiętam oglądanie ms channel9 dawno temu.

 2
Author: Stepan Yakovenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-15 10:20:47

UżywamVisual Assist X z visual studio od około półtora roku. Jest to niesamowite narzędzie, które bardzo pomaga w zwykłym kodzie C++, ale nie działa zbyt dobrze na kodzie szablonowym. Na przykład, jeśli masz zaawansowany projekt szablonu oparty na zasadach, nie będzie wiedział, jak zmienić nazwy zmiennych, a projekt nie będzie się już kompilował.

 1
Author: Liviu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-22 12:26:45

Zainstaluj plugin, który umożliwia taką funkcjonalność: https://visualstudiogallery.msdn.microsoft.com/164904b2-3b47-417f-9b6b-fdd35757d194

 0
Author: support_ms,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-01 07:13:39

Chciałbym zwrócić uwagę, że Qt Creator (C++ IDE, które jest kompatybilne z bibliotekami VC++ i systemem budowania) zapewnia zmianę nazwy symbolu, która działa bardzo dobrze:

Możesz zmienić nazwy symboli we wszystkich plikach w projekcie. Po zmianie nazwy klasy można również zmienić nazwy plików, które pasują do nazwy klasy.

Qt Creator-Refaktoring: Zmiana Nazw Symboli

Qt Creator ' s rename functionality daje listę znalezionych odniesień do symbolu i możliwość aby wykluczyć którykolwiek z nich przed wykonaniem zastąpienia. Więc jeśli źle odczytuje odniesienie do symbolu, możesz go wykluczyć.

Qt Creator Refactor Replace

Więc zmiana nazwy symbolu C++ jest możliwa. Przechodząc do VS od Qt Creator czuję twój ból, do tego stopnia, że rozważałem konwersję istniejących projektów VS o znacznych rozmiarach, aby zamiast tego użyć Qt Creator.

Nie kupuję argumentu, że jest to szczególnie trudne w C++. Oprócz tego, że działa już bardzo dobrze w Qt Twórco, jest fakt, że kompilator i linker mogą znaleźć i dopasować symbole: gdyby to nie było możliwe, nie mógłbyś zbudować swojej aplikacji.

W rzeczywistości języki takie jak Python, które są dynamicznie pisane, również mają narzędzia do zmiany nazw. Jeśli możesz stworzyć takie narzędzie dla języka, w którym nie ma wyraźnych odniesień do typu zmiennej, zdecydowanie możesz to zrobić dla C++.

Case in point:

... Lina, biblioteka refaktoryzacji Pythona... Próbowałem kilka razy i to zdecydowanie zadziałało zgodnie z oczekiwaniami.

Stack Overflow-jakich narzędzi refaktoryzacyjnych używasz w Pythonie?

 0
Author: Terrabits,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-11 19:36:32

Cóż, pomimo komentarzy wszystkich ekspertów, całkowicie się nie Zgadzam, że problem wsparcia refaktoryzacji ma coś wspólnego z semantyką języka C++ lub jakąkolwiek semantyką języka. Z tym, że sam konstruktor kompilatorów nie decyduje się na implementację w pierwszym przypadku ze względu na własne powody lub ograniczenia.

I obrażenia nie należy brać, ale z przykrością stwierdzam Panie jsb powyższy link, który podałeś na poparcie swojej sprawy (tj. yosefk) o defekcie C++ jest całkowicie wykluczone. To bardziej jak zapewnienie kierunku do "Los angeles", gdy ktoś poprosił o "San Franisco".

Moim zdaniem poruszanie problemu trudności refaktoryzacyjnych dla niektórych języków jest bardziej jak podnoszenie palca na integralność języka. Zwłaszcza dla języków, które czasami są tylko bólem.... jeśli chodzi o ich deklarację i użycie zmiennych. :) Ok! powiedz mi, jak to się stało, że tracisz ślad jakiegoś węzła w drzewie węzłów ... eh? Więc co to jest zrobić z dowolnym językiem być to tak proste, jak kod na poziomie maszyny. Wiesz, że kompilator VS może łatwo wykryć, czy jakaś zmienna lub rutyna jest martwym kodem. Rozumiesz?

O rozwijaniu narzędzia stron trzecich. Myślę, że dostawcy kompilatorów mogą zaimplementować go znacznie łatwiej i efektywniej, jeśli kiedykolwiek chcieli, to narzędzie innej firmy, które będzie musiało zduplikować całą bazę danych do przetwarzania, aby ją obsłużyć. Obecnie kompilator potrafi optymalizować kod bardzo efektywnie na poziomie kodu maszynowego i słyszę tutaj, że trudno powiedzieć jak niektóre zmienne są używane wcześniej. Chyba nie zwróciłeś uwagi na wewnętrzne działanie kompilatora. W jakiej bazie przechowuje.

I na pewno jest to prawie ta sama baza danych, której IDE używa do wszystkich podobnych celów. W poprzednim czasie kompilator był tylko osobną jednostką, a IDE tylko edytorem tekstu z pewną specjalizacją, ale z czasem luka między kompilatorem a edytorem IDE staje się mniejsza i jego bezpośrednio zaczął pracować na podobnej przetwarzanej bazie danych. Co umożliwia aby efektywniej radzić sobie ze wszystkimi kwestiami związanymi z intellisense i refaktoryzacją lub innymi kwestiami związanymi ze składnią. Przy wszystkich prekompilowanych rzeczach i kompilowaniu JIT ta luka jest prawie zaniedbana. Tak więc prawie sensowne jest używanie tej samej bazy danych w obu celach, w przeciwnym razie zapotrzebowanie na pamięć wzrasta z powodu powielania.

Wy wszyscy jesteście programistami - ja nie! A Wy macie problemy z wizualizacją jak refaktoryzację można zaimplementować w C++ lub jakimkolwiek języku, którego nie mogę pojąć. Its just all about na coś trzeba włożyć więcej wysiłku dla niektórych mniej w zależności od tego, jak ciężka jest osoba, którą próbujesz pchnąć.

Anyway way VS ładne IDE zwłaszcza jeśli chodzi o C#.

 -3
Author: NickyBlue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-05 10:50:03