Czy ktoś zna w pełni funkcjonalne narzędzie do refaktoryzacji dla C ++, które działa niezawodnie z dużymi bazami kodu (około 100 000 linii)?
Próbowałem wszystkiego, co udało mi się znaleźć w ciągu ostatnich lat: SlickEdit, Eclipse CDT. W ogóle nie nadawały się do użytku.
PODSUMOWANIE : Poświęciłem trochę czasu i oceniłem „Visual Assist X” oraz „Refactor for C ++”. Oba mają imponujące funkcje, ale oba również nie są doskonałe. Wyodrębnienie dużego bloku kodu zwykle nie jest satysfakcjonujące bez ręcznych modyfikacji - i dlatego się nie opłaca.
„Visual Assist X” ma fajne funkcje, takie jak znacznie bardziej kompletne autouzupełnianie itp. Ale prowadzi do tak dużego migotania i znacznie spowalnia w niektórych punktach.
Moim zdaniem odpowiedź brzmi: „Nie, nie ma gotowego do produkcji narzędzia do refaktoryzacji dla C ++”
AKTUALIZACJA Marzec 2015 Jeśli chodzi o hdoghmens, odpowiedz dzisiaj, próbowałem Resharper dla C ++. Jego link https://www.jetbrains.com/resharper/ nie mówi nic o C ++. Ale znalazłem Resharper C ++, który został ogłoszony ponad rok temu tutaj:
https://www.jetbrains.com/resharper/features/cpp.html
Wypróbowałem to z VC2010, używając podstawy kodu 20 MB.
Test 1: Metoda wyodrębniania: powoduje wyjątek Resharper. Żaden kod źródłowy nie został zmieniony.
Test 2: Metoda wyodrębniania z innego źródła: działa dobrze
Test 3: Zmień sygnaturę wyodrębnionej funkcji: Wyniki w uszkodzonym kodzie C ++:
bool myclass::do_work123(<unknown long Color>int& Filled*&, long, int&)
Może dlatego C ++ nie jest wymieniony na stronie głównej.
Moim zdaniem nadal odpowiedź na to pytanie brzmi „NIE” .
źródło
Odpowiedzi:
Uważam, że Visual Assist X z Visual Studio jest bardzo przydatny. Innym wyborem jest Refactor for C ++ .
źródło
Visual Assist i Visual Studio znacznie ułatwiają obsługę dużych baz kodu. Pomoc wizualna jest dobra w śledzeniu, w jaki sposób klasa lub element członkowski jest używana, i jest bardziej skuteczna w zmienianiu jej nazwy bez fałszywych alarmów niż wyszukiwanie i zastępowanie.
źródło
Spodziewam się, że clang znacząco zmieni krajobraz narzędzi do refaktoryzacji C ++ w ciągu najbliższych kilku lat. Jest to modułowy kompilator typu open source, który udostępnia interfejs API do analizowania i semantycznej analizy kodu C ++. IDE i inne narzędzia będą mogły korzystać z tego interfejsu API, zamiast wykonywać trudną pracę polegającą na pisaniu własnego parsera i analizatora semantycznego.
Google już stworzył narzędzie do refaktoryzacji na dużą skalę przy użyciu clang .
źródło
Mozilla ma własne narzędzie do refaktoryzacji o nazwie Pork ( Wiki , Developer Wiki ). Oto blog twórcy Pork. Z tego, co przeczytałem, Wieprzowina była z powodzeniem stosowana w refaktoryzacjach w Mozilli.
Wieprzowina powinna pomóc, jeśli pochodzisz z * nix land, dla Visual Studio też polecam Visual Assist.
źródło
Nasz DMS Software Reengineering Toolkit to silnik transformacji zaprojektowany do przeprowadzania złożonych transformacji dużych części kodu, w tym C ++. Był używany do wprowadzania niezawodnych zmian w systemach zawierających miliony linii kodu. Działa przy użyciu analizatorów i transformatorów poprawnych dla kompilatora.
Ma pełny parser C ++ z rozpoznawaniem nazw i typów, buduje AST kodu, może stosować transformacje proceduralne lub od źródła do źródła (ze składnią powierzchniową C ++) w celu poprawienia tych drzew i ponownie wygenerować kompilowalne dane wyjściowe z zachowanymi komentarzami. (Edycja: 01.07.2011: Teraz C ++ 1X w stopniu, w jakim rozumiemy standard :)
Był używany w projektach reengineeringu na dużą skalę, w tym przy przebudowie komponentów C ++ oraz w 100% w pełni zautomatyzowanych tłumaczeniach między językami. Możesz przeczytać o tym na stronie internetowej.
DMS jest również używany do tworzenia dowolnych narzędzi do analizy źródeł. Przykłady obejmują wykrywanie klonów, pokrycie testów, inteligentną różnicę (porównanie struktur kodu źródłowego i abstrakcyjnych operacji edycji zamiast wierszy z prostym wstawianiem i usuwaniem) itp.
To, czym nie jest (obecnie), jest interaktywnym narzędziem do refaktoryzacji. Uważamy, że aby dobrze wykonać większość refaktoryzacji, potrzebujesz głębokiej kontroli i analiz przepływu danych. DMS ma ogólną maszynerię, która to obsługuje, i ta maszyna jest obecnie zaimplementowana dla C, COBOL i Java, a C ++ jest następnym w kolejności. To ciężka praca. Nie zobaczysz wielu poważnych narzędzi do refaktoryzacji C ++ od nikogo, dopóki tego rodzaju problem nie zostanie dobrze rozwiązany. Najpierw potrzebujesz pełnego parsera C ++: -}
EDYCJA 05.07.2011: Wygląda na to, że mamy zamiar uruchomić wersję interaktywną. Wygraliśmy Departament Energii Fazy I SBIR, aby zbadać, jak to zrobić. Zobacz http://science.energy.gov/sbir/awards-and-general-stats/fy-2011/phase-i-by-state/?p=1#tx (Look for Semantic Designs under „Texas”). Nie spodziewaj się wyniku w pośpiechu; to dopiero początek 3-fazowego wieloletniego programu, który prowadzi do narzędzia.
EDYCJA 11.08.2011: Pierwszy postęp ... teraz obsługujemy wszystkie dyrektywy C ++ 0x i OpenMP.
EDYCJA 1/4/2012: Wykonuje pełną analizę przepływu kontroli kodu C ++.
EDYCJA 15.09.2014: Teraz masz pod ręką przedni parser / silnik transformacji C ++ 14. Nawet zmienia nazwę całkiem niezawodnie w tym momencie: -}
źródło
Jeśli używasz emacsa, wypróbuj Xrefactory . Obsługuje ekstrakcję metod, zmianę nazw klas / funkcji / zmiennych oraz parametry wstawiania / usuwania / przenoszenia, a także bardzo dobry / szybki silnik uzupełniania kodu.
źródło
Obecnie nie mogę polecić żadnego narzędzia do refaktoryzacji dla C ++, a już na pewno nie dla dużych baz kodu składających się z 100 tysięcy linii i więcej. Miałem nadzieję, że to się zmieni, podobnie jak OP, i mam nadzieję, że pewnego dnia coś się wydarzy. Obawiam się, że sam język może się znacznie zmienić, zanim zobaczymy naprawdę dobre narzędzia.
btw, czy SlickEdit porzucił swoje funkcje refaktoryzacji?
źródło
Polecam wypróbować rtags, jeśli używasz emacsa i jeszcze go nie wypróbowałeś (dostępny jest również pakiet dla vima). Jest to aplikacja klient / serwer oparta na Clang, która indeksuje kod C / C ++, z następującymi funkcjami:
Postanowiłem spróbować po obejrzeniu tego wykładu, który przedstawił mi rtagi (i emacs).
(Muszę powiedzieć, że posunąłem się tak daleko dopiero po tym, jak mój QtCreator nie zdołał poprawnie zmienić nazw niektórych symboli, co jest powodem, dla którego używam tego wspaniałego IDE na razie)
Oprócz tego, co jest obsługiwane przez rtagi, potrzebuję również dodatkowych fajnych funkcji, w tym:
W tym celu polecam użycie pakietu semantycznego refaktora dla emacsa (nie jestem pewien, czy istnieją alternatywy dla vima)
Ogólnie narzędzia oparte na clang wyglądają bardzo obiecująco. Jeśli jesteście zainteresowani dodatkowymi informacjami o narzędziach clang do refaktoryzacji w C ++, w tym o projektach z dużą bazą kodu, Chandler Carruth wygłosi kilka świetnych przemówień.
źródło
Wydaje mi się, że zestaw narzędzi do inżynierii oprogramowania DMS robi to. Jest to silnik do transformacji kodu, zaprojektowany na dużą skalę i obsługuje C ++. Nie mam jednak pojęcia, jak eleganckie jest to wyjście.
źródło
Z pewnością trzeba wspomnieć o Klocwork jako o komercyjnym zestawie do refaktoryzacji kodu. Wygląda to bardzo obiecująco, kiedy przeglądasz wideo demonstracyjne.
źródło
Problemem są szablony C ++. Od 2019 roku nie znam żadnego narzędzia do refaktoryzacji, które obsługuje szablony C ++. Próbowałem VS2019, VisualAssist, Clion, QtCreator.
Rozważ przykład:
Jeśli uruchomię Rename Refactoring
foo::print
,bar::print
należy również zmienić nazwę automatycznie. Ponieważ są one połączone za pomocącall_print
wystąpień szablonów funkcji.źródło
Jeśli używasz Visual C ++ (Express Edition jest bezpłatna), możesz skorzystać z Visual Assist ze strony www.wholetomato.com (link do funkcji refaktoryzacji C ++).
Ma 30-dniowy okres próbny i okazało się, że jest szybszy i bardziej wyposażony w funkcje niż wbudowana funkcja Intellisense w samym produkcie Visual C ++.
źródło
Jeśli chcesz przeprojektować swoją bazę kodu: ŁOŚ. Ale to jest duży zbiór narzędzi do analizy i przebudowy, a nie edytor.
źródło
Obecnie dostępne jest rozszerzenie refaktoryzacji C ++ dla programu Visual Studio 2013 firmy Microsoft: http://visualstudiogallery.msdn.microsoft.com/164904b2-3b47-417f-9b6b-fdd35757d194
źródło
Zdecydowanie Resharper Ultimate jest drogą do zrobienia. Szczęście gwarantowane :)
W wersji beta od marca 2015 r.
źródło
CLion wygląda bardzo obiecująco.
Uwaga: nie próbowałem jeszcze tego, ponieważ muszę przekonwertować moje projekty do formatu CMake, aby z niego korzystać.
źródło
Polecam wypróbować Lattix . Pozwala analizować duże bazy kodów C / C ++ w celu odkrycia architektury, zidentyfikowania problematycznych zależności i przeprojektowania kodu w celu poprawy modułowości i zmniejszenia długu technicznego. Lattix zapewnia również szereg algorytmów pomocnych w procesie refaktoryzacji. Algorytmy te pomagają dowiedzieć się, jak przenosić elementy z jednej części hierarchii do drugiej, przerywać cykle i przenosić podsystemy, aby można było poprawić sprzężenie i spójność podsystemów. Oto wyniki analizy Lattix jądra Androida (1,6 miliona LOC C / C ++). Pełne ujawnienie: pracuję dla Lattix
źródło
Przepraszam, że tak późno znalazłem to pytanie. Moi studenci i asystenci pracują nad refaktoryzacją C ++ od około 2006 roku. Większość infrastruktury refaktoryzacyjnej CDT została zbudowana przez mój zespół w Instytucie Oprogramowania IFS. od kilku lat zapewniamy Cevelop naszą wersję CDT z obsługą refaktoryzacji modernizacji kodu C ++ itp. Cevelop może pracować z dużymi bazami kodu, jeśli obszar roboczy jest poprawnie skonfigurowany. Bezpłatne dostępne na https://cevelop.com
źródło
Znalazłem następującą wtyczkę dla Visual Studio 2013: Refaktoryzacja Visual C ++ firmy Microsoft.
To tylko proste narzędzie do zmiany nazwy, ale działa bezbłędnie. Dodaje następujące menu kontekstowe po kliknięciu symbolu prawym przyciskiem myszy:
źródło