Migracja projektu do nowego Delphi

0

Cześć,
mam bardzo stary projekt (Delphi 6) i mam szczerze dość utrzymywania kodu w tak starym środowisku (specjalnie mam do tego maszynę wirtualną). Chciałbym zmigrować ten projekt do nowej wersji. Mam do Was prośbę, podzielcie się jakimiś dobrymi radami jak to zrobić aby się najmniej narobić - może jakieś fajne narzędzie do tego jest?
W projekcie jest trochę komponentów których już nie mam w nowszych wersjach, jak komponenty RX Controls, BDE. Jak sprytnie wymienić je na coś innego aby mi coś nie umknęło?
Co z kodowaniem, można jakoś zadbać o to żeby nowy projekt nie był unicode tylko dalej WIN1250 tak globalnie?

1
robertz68 napisał(a):

Cześć,

mam bardzo stary projekt (Delphi 6) i mam szczerze dość utrzymywania kodu w tak starym środowisku (specjalnie mam do tego maszynę wirtualną). Chciałbym zmigrować ten projekt do nowej wersji. Mam do Was prośbę, podzielcie się jakimiś dobrymi radami jak to zrobić aby się najmniej narobić - może jakieś fajne narzędzie do tego jest?

Niby coś tam jest, ale generalnie to kupa.
Może, jeśli kod jest wybitnie banalny, to i zadziała.
Jednakże nie polecam, a poza tym czeka Cię jeszcze jeden horror-szoł - ANSI vs UTF.

W projekcie jest trochę komponentów których już nie mam w nowszych wersjach, jak komponenty RX Controls, BDE. Jak sprytnie wymienić je na coś innego aby mi coś nie umknęło?

RX gdzieś tam widziałem utrzymywane, ale nie wiem nie znam sie, przestałem tego używać jakieś 15 lat temu.
BDE da się zamienić przy pomocy refind, czytaj:
http://docwiki.embarcadero.com/RADStudio/Sydney/en/ReFind.exe,_the_Search_and_Replace_Utility_Using_Perl_RegEx_Expressions

A jak to za mało to tylko za niecałe 4K USD:
https://delphiparser.com/product/bde-to-firedac-migration-wizard-express/

Co z kodowaniem, można jakoś zadbać o to żeby nowy projekt nie był unicode tylko dalej WIN1250 tak globalnie?

Nie da się :)
Żeby była jasność - da się migrować kodowanie plików PAS do UTF, ale Ty pewnie masz na myśli takie zachowanie, aby string był po staremu, czyli ANSI.
Nie ma opcji, aby redeklarować typo string. String jest słowem kluczowym i się nie da.
Możesz zawsze masowo zamienić string na AnsiString, ale...

0

Projekt nie jest jakiś tam potężny, 40 tys. linii, czyli realnie zapewne z 10-15 tys.
Czułem że to nie pójdzie mi z automatu.

No dobrze, a jak wy to robicie, po prostu wczytujecie do nowego środowiska stary projekt i po kolei poprawiacie błędy, czy może na początek poprawiacie ile się da np. w notepadzie ++?
Prosiłby o podzielenie się wiedzą tych, którzy mają jednak większe doświadczenie ode mnie.

0
robertz68 napisał(a):

Projekt nie jest jakiś tam potężny, 40 tys. linii, czyli realnie zapewne z 10-15 tys.

Czułem że to nie pójdzie mi z automatu.

Masz tam jakiś obiektowy design, warstwy (kod podatny refactoringowi) czy szycie eventów na widgetach?

Widzę, mam kumpla z Delphi (nawiasem mówiac kolejny człowiek przerobiony przeze mnie na C#), tym niemniej widzę, ze dla niego powrót do własnego kodu w/w typu sprzed 3mc jest ogromem, w stosunku do powrotu do 15 letniego projektu obiektowego / modularnego / warstwowego.

Wydaje mi się (wiem, pesymistycznie) że zrobić na nowo nie będzie czymś najgorszym.
Miałem (na BCB) do ratowania projekt, gdzie programista trzasnął drzwiami i "zapomniał" oddać kilka miesięcy (ponad pól roku) źródeł.
Mieliśmy widoczność, jak formatki są widoczne na aplikacji, wiele robiliśmy od nowa.

Dało się, w bonusie ze ZNACZĄCYMI zmianami architektonicznymi na plus.
W/w bardzo podniosły ekonomię rozwoju później. Niemal zaraz klient docenił, że *"kurcze, widzę macie nowe możliwości poprawiania w punkcie A bez psucia w punkcie B" *co poprzednio miał zagwarantowne
Płatnik tej roboty do dziś to docenia

1

Pytanie - czy te RX controls to jest to - https://wiki.freepascal.org/RXfpc?

Poza tym (sam tego nie używam, więc może chodzi o inny pakiet, jeśli coś namieszałem to proszę o wybaczenie) na stronie http://www.micrel.cz/RxLib/ jest informacja Version 2.75 Updated to Delphi 7, 2005, 2006, 2007, 2009, 2010, XE, XE2, XE3, XE4, XE5, XE6, XE7, XE8 and Delphi 10 Seattle/Berlin/Tokyo/Rio/Sydney więc powinno pójść na nowszym Delfinie.

Co do BDE - https://wiki.freepascal.org/Lazarus_Database_Overview#Lazarus_and_Firebird.2FInterbase lub https://forum.lazarus.freepascal.org/index.php?topic=23492.0. Wymaga to trochę grzebania, ale do ogarnięcia.

Może byś zastanowił się nad przejściem na Lazarusa?

To IDE posiada kreator migracji z Delphi na Lazarus - https://wiki.freepascal.org/Delphi_Converter_in_Lazarus. Jestem prawie pewien, że od ręki to nie pójdzie i trzeba będzie trochę pogrzebać, ale z drugiej strony - zainstalowanie Lazarusa, dodanie tych kontrolek, a potem próba migracji to parę godzin i będziesz wiedział, czy to dobry trop.

Uprzedzając krytyków - darmowy Lazarus jest na pewno lepszy od Delphi6 :P

0
cerrato napisał(a):

Pytanie - czy te RX controls to jest to - https://wiki.freepascal.org/RXfpc?

aż tak mocno nie przejmował bym się RX-ami, bo kontrolki jakie z nich wykorzystuję to CurrencyEdit, spokojnie zastępuje go kontrolka z pakietu Jedi, jeśli chodzi o BDE to na szczęście FireDac da radę użyć z minimalnymi zmianami, przy okazji zrezygnować mogę z połączenia za pomocą ODBC.

Bardziej chodzi mi o takie procedury, które spowoduję że nie pominę czegoś w trakcie migracji.

Co do Lazarusa, na razie miałem epizod który polegał na tym że go zainstalowałem, na więcej nie było czasu :).

1

Co do Lazarusa, na razie miałem epizod który polegał na tym że go zainstalowałem, na więcej nie było czasu

To moja rada - daj mu szansę, poświęć parę godzin.

Jak ktoś się przesiada z nowego Delphi na Lazarusa to może czuć szok podobny do przejścia z Mondeo do Matiza. Nawet sam największy forumowy wyznawca Lazarusa - czyli @furious programming wiele razy podkreślał, że Delphi jest 100 razy bardziej rozbudowane, dopieszczone, dopracowane itp. ALE porównując nowego Lazarusa z totalnie zabytkowym Delphi (wersja 6, a nie kultowa 7, z którą tutaj regularnie na początku roku szkolnego się zgłaszają studenci :D ) to i tak będzie mocny krok do przodu.

1

Delphi raczej nie jest 100x bardziej rozbudowane od Lazarusa, ale na pewno ma więcej funkcji. No i stabilność Delphi też jest wyższa niż Lazarusa, bo ten drugi potrafi się śmiesznie glitchować. Ale to nie przeszkadza w wytwarzaniu większych programów niż konsolowe pierdoły — sam bez problemu utrzymuję kilka projektów po kilkadziesiąt tysięcy linijek kodu bez komentarzy (choćby Richtris — 27kLoC). Lazarus jest dobrym IDE, choć niestety tylko dobrym.

Skusiłbym się na przeniesienie tego projektu do Lazarusa, ale tylko pod warunkiem, że zna się to IDE. Powodów jest kilka:

  1. Lazarus jest darmowy w pełnej swojej wersji, aktualizacje są co kilka miesięcy,
  2. Działa na wszystkich systemach Windows od linii NT (i nie tylko),
  3. Można za jego pomocą wygenerować exe dla nowych, jak i starych systemów (jeśli np. XP nadal wchodzi w grę),
  4. Społeczność Free Pascala to w dużej części leśnie dziadki (sic!), które nadal, oprócz Lazarusa, jednocześnie używają bardzo starych wersji Delphi. Stąd w razie problemów z czymkolwiek, masz dostęp do masy ludzi, którzy z chęcią pomogą z portowaniem tego projektu (gotowce zawsze sypią się gęsto).

Ale zaznaczyć należy, że LCL jest inaczej zbudowane niż VCL (bo jest wieloplatformowe i obsługiwane przez różne widgetsety), dlatego wiele rzeczy trzeba będzie zrobić inaczej niż w Delphi. Można spróbować użyć wbudowanego narzędzia do migracji projektów z Delphi, ale i tak trzeba będzie co nieco ręcznie poprawić — automat magii nie wykona, szczególnie jeśli chodzi o stary silnik bazodanowy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1