Jak można przekonwertować rozsądnie dużą (> 300K), dość dojrzałą bazę kodów C do C++?Konwersja źródła C na C++
Rodzaje CI mają na myśli podział na pliki z grubsza odpowiadające modułom (tj. Mniej ziarnisty niż typowy rozkład oparty na klasach OO), z wykorzystaniem wewnętrznego powiązania w funkcji prywatnych i danych oraz zewnętrznego powiązania dla funkcji publicznych i dane. Zmienne globalne są szeroko wykorzystywane do komunikacji między modułami. Dostępny jest bardzo obszerny pakiet testów integracji, ale nie ma testów na poziomie jednostki (tj.
mam na myśli ogólną strategię:
- kompilować wszystkiego w C podzbioru C++ 's i zdobądź pracę.
- Konwertuj moduły na wielkie klasy, tak aby wszystkie odsyłacze były ograniczone zakresem nazwy klasy, ale pozostawiając wszystkie funkcje i dane jako statyczne elementy i sprawiają, że działa.
- Konwertuj wielkie klasy na instancje za pomocą odpowiednich konstruktorów i inicjowanych powiązań; w razie potrzeby wymieniaj dostępy do elementów statycznych na pośrednie; i zacznij działać.
- Teraz podejdź do projektu jako źle zinterpretowana aplikacja OO i napisz testy jednostkowe, w których zależności są możliwe do wyodrębnienia i rozłóż je na osobne klasy, w których nie są; celem byłoby przejście z jednego programu roboczego do drugiego przy każdej transformacji.
Oczywiście, to byłaby spora praca. Czy są jakieś studia przypadków/opowiadania o wojnie na temat tego rodzaju tłumaczenia? Alternatywne strategie? Inne przydatne porady?
Uwaga 1: program jest kompilatorem i prawdopodobnie miliony innych programów polegają na tym, że jego zachowanie się nie zmienia, więc przepisanie w wersji hurtowej w zasadzie nie wchodzi w grę.
Uwaga 2: źródło ma prawie 20 lat i ma prawdopodobnie 30% rezygnacji z kodu (linie zmodyfikowane + dodane/poprzednie całkowite linie) rocznie. Innymi słowy, jest to w dużym stopniu utrzymywane i rozszerzone. Tak więc jednym z celów byłoby zwiększenie możliwości utrzymania.
[Przez wzgląd na pytanie, załóżmy, że tłumaczenie na język C++ jest obowiązkowe, i że pozostawienie go w C jest nie opcja. Punktem dodania tego warunku jest wyeliminowanie odpowiedzi "zostaw to w C".]
Jakie są ramy czasowe obowiązkowej migracji? – paxos1977
Jak dobrze znasz bazę kodu C? Na lewą stronę? – paxos1977
Tłumaczenie nie jest obowiązkowe, to tylko ze względu na pytanie (wykorzenić te odpowiedzi "nie tłumacz"). Ramy czasowe mogą wynosić 1-10 lat (jest to program długowieczny). –