[PL] Smutna jest knajpa byłych C++'owców :)
Tak Kazikiem podjechałem trochę, ale o mamo..
Tydzień zabawy z C++ w Visual Studio 2008 i płakać mi się chce. Może już mam umysł .NET'owca, ale tylu rzeczy mi brakuje.
W skrócie, bez jakiegoś jeszcze szczególnego pomysłu na program wyszedłem z hardcore'owego założenia, że mam składnie języka, IDE, własną głowe i conajwyżej WinAPi do podparcia i bah.. wymyślam koło od nowa czyli buduję Framework.
Ambitnie sobie po samym głównym namespace'ie nazwałem go TheFramework (wymowa: Tfu Dwe Frejmwerk :>)
Jest to jeszcze bardzo niedojrzała konstrukcja i na razie mogę ją wyrazić poniższym diagramem (click powinien dać abstrakcyjne powiększenie)
Spostrzeżenia:
* Cóż, odwykłem już chyba od walki z składnią, kompilatorem i nieczytelnymi komunikatami błędów. Walor C++. Przykład: Ten mój TheFramework siedzi sobie w DLLce. Oczywiście, aby sprawnie wyłuskać potem klasy i dać komunikat przy generowaniu .lib'a muszę posilić się taką miła konstrukcją:
#ifndef THEFRAMEWORK_API
#ifdef THEFRAMEWORK_EXPORTS
#define THEFRAMEWORK_API __declspec(dllexport)
#else
#define THEFRAMEWORK_API __declspec(dllimport)
#endif
#endif
Wyrzuciłem sobie ten kawałek makro-kodu do osobnego nagłówka i co gdy zapomnę umieścić #include do tego pliku a moja klasa będzie zawierała deklarację THEFRAMEWORK_API?
Sypnie błedami jak poniżej:
Error 1 error C2470: 'Interface' : looks like a function definition, but there is no parameter list; skipping apparent body c:\users\danieb\documents\visual studio 2008\projects\theframework\theframework\object.h 21 TheFramework
Error 2 error C2470: 'Object' : looks like a function definition, but there is no parameter list; skipping apparent body c:\users\danieb\documents\visual studio 2008\projects\theframework\theframework\object.h 31 TheFramework
Error 3 error C2470: 'DisposableObject' : looks like a function definition, but there is no parameter list; skipping apparent body c:\users\danieb\documents\visual studio 2008\projects\theframework\theframework\object.h 43 TheFramework
Error 4 error C2470: 'Delegate' : looks like a function definition, but there is no parameter list; skipping apparent body c:\users\danieb\documents\visual studio 2008\projects\theframework\theframework\object.h 54 TheFramework
Error 5 error C2470: 'Runnable' : looks like a function definition, but there is no parameter list; skipping apparent body c:\users\danieb\documents\visual studio 2008\projects\theframework\theframework\object.h 59 TheFramework
Error 6 error C2470: 'CallingStack' : looks like a function definition, but there is no parameter list; skipping apparent body c:\users\danieb\documents\visual studio 2008\projects\theframework\theframework\exception.h 13 TheFramework
I tak dalej. Patrzę potem na definicję moich klas i w jak byk nie mogę zobaczyć gdzie ten kompilator tam zobaczył funkcję. Rozkosz. Po paru takich awariach mam już wbite w głowę, że zapomniałem dodać swojego magicznego: #include "TheFrameworkDllImports.h"
Jestem w stanie się założyć, że ktoś z akademicką wiedza na temat C++ i dużą ilością rozleniwiającej praktyki w .NET Framework czy Java, jak zobaczy taki bład przy prostej konstrukcji:
class THEFRAMEWORK_API Object
{
public:
Object(void);
virtual ~Object(void);
inline virtual wchar_t* ToString() {
return L"Base object";
}
inline virtual wchar_t* GetType() = 0;
};
To zdębieje na godzinę kląc jak szewc i sprawdzając średniki, dwukropki i inne dyrdymały. No ale to oczywiście taki hobbistyczny żart i w sumie przyznanie się ponowne, że odwykłem od języka i dawno nie miałem praktyki. Pewnie multum tego typu głupich błedów można uniknąć tylko poprzez codzienne pisanie, tylko. Co nie zmienia faktu, że po doświadczeniach z zarządzanym kodem człowiek sobie zaczyna myśleć "what the kurka wodna". Managed C++ pomoże? No nie wiem.. cóż.. trzeba to kochać i przyznam, że po tygodniu zabawy nawet to polubiłem i z tesknotą i nostalgią przypomniałem sobie, że w sumie kiedyś to chyba też dosyć często walczyłem z kompilatorem i językiem tylko po to, żeby moja zawiła konstrukcja miała obiektowe ręce i nogi w moim skromnym mniemaniu.
No okay.. Język językiem, ale środowisko. Eh.. trochę jakby niewiele się zmieniło co mnie smuci przy całej tej dramatycznej ewolucji w kontekście .NET Framework. Można to chyba potraktować jako nasz trend Managed C++ to upgrade'u kodu w górę, a przyszłość to .NET kochani. Nisza w postaci paru rynków gdzie C++ ciągle wiedzie prymat musi sobie jakoś radzić, no ale do rzeczy:
* Intellisense działa tak samo z czapki jak za dawnych lat. Kiedyś aby sobie z tym poradzić namówiłem pracodawcę na zakup Borland Together, który naprawiał to i wiele innych rzeczy. Teraz zrobiłem sobie proste macro, które mi przebudowuje bibliotekę.
Jak wygląda macro? Tak:
Sub IntellisenseFixerMacro()
Dim solutionIntelliBase = DTE.Solution.FullName.Substring(0, DTE.Solution.FullName.LastIndexOf(".")) & ".ncb"
Dim solutionName = DTE.Solution.FullName
DTE.Solution.Close(True)
FileIO.FileSystem.DeleteFile(solutionIntelliBase)
DTE.Solution.Open(solutionName)
DTE.Solution.SolutionBuild.Build(True)
MsgBox("Intellisense database was rebuilt successfully!")
End Sub
Co robi macro? usuwa plik .ncb. Zgodnie z instrukcją z MSDN Library, plik .ncb z biblioteka danych do intellisense jest zawsze odbudowany gdy zostanie usunięty. Dzieje się to przy pierwszym buildzie. Operacja się kompikuje gdy Visual Studio z otwartym projektem trzyma łapę na pliku i nie można z nim nic zrobić dopóki rozwiązanie nie zostanie zamknięte. Macro automatyzuje proces wyjścia z VS, odszukania pliku w shellu, usunięcia, powrotu do VS i ponownego otwarcia projektu + build. Brzydkie, ale działa.
* Testy, no ja już bez nich żyć nie mogę. W Native C++ - nie są wspierane. Można kombinować z mix'owanym projektem i /clr ale po co.. chciałbym mieć to zintegrowane.
* FxCop był fajny? Zintegrowana funkcjonalność Analizy kodu w VS Team Edition Ci się podoba? Chcesz to zastosować w C++ ha.. error: only managed C++ supported.
* Jak widać po powyższym obrazku: diagramów nauczyłem się używać, ale w pierwszej konfrontacji miałem kompletnie inny pomysł jakbym to chciał widzieć w VS.
Generalnie jak zawsze uważałem i uważam, że Visual Studio to środowisko kompletne tak z perspektywy programowania w C++ i porównaniu z .NET Framework jestem trochę zawiedziony z jednej strony, z drugiej chyba mimo wszystko niezbyt zaskoczony.
Jak wspomniałem, jest jeszcze wiele dziedzin, gdzie managed code może nie jest najlepszym rozwiąznaniem, ale w przypadku aplikacji biznesowej w życiu bym się nie zdecydował na rozpoczynanie teraz projektu w C++
Nostalgia<CPP> mojaNostalgia(NO_CO_TY_MAMUTY_PRZECIEZ_NIE_WYGINELY,TRUE);
mojaNostalgia.Kill(FOREVER);
Technorati Tagi: Polish posts,coding,babbling,C++
Comments
Anonymous
March 21, 2008
Odpowiedzia na czesc tych problemow jest Visual Assist :).Anonymous
March 21, 2008
O widzisz, poza Borland Together był jeszcze Visual Assist od Whole Tomato :)prawie zapomniałem o nich. Wciąż z perspektywy programisty .NET pewne rzeczy z paczki wymagają add-on'ów :)Anonymous
March 24, 2008
Jeżeli chodzi o narzędzie zbliżone do FxCop'a dla C/C++ polecam LINT: przy tym kombajnie FxCop raczkujeAnonymous
April 25, 2008
Zastanawiałem jaki tytuł nadać temu wpisowi, powyższy mi nie pasuje, ale niech zostanie :) Nie pasuje