Wpis z mikrobloga

#programowanie #csharp

Kolejne pytanie z kategorii "Ktoś kto zwykle programował w C++ poznaje nowy świat". Tym razem chodzi o strukturę aplikacji samą w sobie, której nie mogę ogarnąć na ten moment.

C++ jest prosty. Od czego zaczyna się program? Od funkcji main(). Między jej klamrami jest program. Pliki .h i .cpp to fikcja istniejąca tylko dla wygody programowania, tak naprawdę to jest jeden pojedynczy walltext deklaracji i definicji klas, struktur, funkcji etc. Co robi kompilator? Ano kompilator te wszystkie .h i cpp. wjebuje do jednego pliku, mieli i wysrywa kod zrozumiały dla procesora. Co się stanie jak kliknę .exe? Zrobi zapewne asemblerowe goto do funkcji main() a potem będzie się działo po kolei wszystko to co w programie jest napisane. Jeśli w IDE jest opisany interfejs graficzny jako XML (np. w Qt), to to też jest tylko dla wygody. W praktyce to wszystko przy kompilacji zostanie przerobione na wartości zmiennych klasy-okienka i skończy tak jak cała reszta mielonki. Efekt jest taki, że jak nie mamy żadnych .dllek to kończymy z jednym pojedynczym .exe który ma w sobie wszystko to co mu daliśmy, jeśli nie korzystamy jawnie z zasobów zewnętrznych, które trzeba wtedy poumieszczać w odpowiednich folderach, w których program będzie szukał.

No i teraz patrzę w C# i nie wiem co tu się o--------a po prostu. Po skompilowaniu aplikacji mamy w folderze Release znacznie więcej plików. Dwa z nich to jakieś XMLowe konfiguracje - reszty nie znam. Ale pomijając nawet to, że program jest w jakiś sposób podzielony. Nie wiem gdzie ten program się nawet zaczyna - w kodzie. Jest jakiś App.xaml, w nim jest App.xaml.cs, w środku jest jakieś App (zapewne chodzi o klasę). Pod App mamy App.g.i.cs gdzie istnieje coś na kształt maina i kilka funkcji a obok tego istnieje zupełnie odrębnie MainWindow. Jak to się wszystko ima do siebie? Mówię tutaj o gołym projekcie WPF, który każdy może sobie stworzyć i zobaczyć to co ja. C# i nie tylko jest tłumaczony do jakiegoś pośredniego języka, więc z tej pajęczyny powstaje na pewno coś na kształt konstruktów C++, ale chciałbym rozumieć to w nieco lepszy sposób niż "no tu se klikne, tu se zrobie ikonkę, hehe klikam se run, apka śmiga yolo". Fajnie, że IDE robi dla mnie milion rzeczy, ale chciałbym wiedzieć co dla mnie robi jednak.
  • 19
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

reszty nie znam

Nie wiem gdzie ten program się nawet zaczyna - w kodzie

ale chciałbym wiedzieć co dla mnie robi jednak.


@Khaine: To może się naucz, a potem zacznij krytykować ( ͡° ͜ʖ ͡°)
  • Odpowiedz
@Khaine: skoro nie wiesz jak to działa, to się naucz a nie miej potem pretensji. Używasz IDE, które zostało stworzone, aby maksymalnie uprościć developerkę i masz pretensje, że nie wiesz co te IDE robi.

Od asemblera? W C#? Oh really?

Zacznij głąbie od asemblera, zobaczy jak wygląda programowanie krok po kroku. Skoki do komórek, akumulatory etc.
  • Odpowiedz
Zacznij głąbie od asemblera, zobaczy jak wygląda programowanie krok po kroku. Skoki do komórek, akumulatory etc.


@ogrod87: Ja p------e, człowieku xD Pisałem nie raz w ASM i wiem co tam się dzieje na niskim poziomie (aczkolwiek pamiętam ASM tylko ledwo co, tego się nie używa po prostu). Tylko poziom warstwy abstrakcji na poziomie Visual Studio jest zbyt daleko od ASM, żeby to się dało tak jasno stwierdzić co się dzieje
  • Odpowiedz
@Khaine: jak chcesz widzieć więcej kodu, to polecam zainstalować SharpDevelop, bo nie ukrywa aż takich ilości automatycznie generowanego kodu, jak np. w momencie, kiedy tworzysz interfejsy w xaml, to wszystko ma swoje odniesienie w deklaracji obiektu w klasie, która domyślnie nie jest widoczna (bo po co?).
  • Odpowiedz
@Khaine:
Niepotrzebnie tak sobie komplikujesz.
Jak chcesz się uczyć to zacznij od aplikacji konsolowych będzie ci o wiele łatwiej- zwłaszcza jak przesiadasz się z C++ szok i różnice powinny być o wiele mniejsze. Nie będziesz sobie zaprzątał głowy niepotrzebnymi "bzdurami".
Jak opanujesz porządnie podstawy, zrozumiesz zdarzenia i klasy częściowe to zrozumienie WPF/APS.NET/ WinForms będzie o wiele łatwiejsze-samo przyjdzie.
Takie podejscie może być nudniejsze-bo na początku nie widać zbyt spektakularnych efektów ale dla kogoś
  • Odpowiedz