Skocz do zawartości

Bartosz Wójcik

Administracja
  • Postów

    363
  • Dołączył

  • Days Won

    14

Posty napisane przez Bartosz Wójcik

  1. Programy, w których kompilator generuje niewydajny kod nie mogą być uznawane za wydajne, to wbrew logice :), potwierdzi to każdy benchmark jeśli postawisz obok siebie ten sam algorytm skompilowany w Go i kompilatorach z VC++ i Intela.

  2. Widać poprawę w generowanym kodzie, bo spojrzałem na najnowszą wersję, jednak zdarzają się kwiatki jak:

    1. Bezsensowe wymiany rejestrów

    .text:0048B721                 xchg    ebx, esi
    .text:0048B723                 neg     ebx
    .text:0048B725                 xchg    ebx, esi
    

    2. To jest dobre:

    .text:0048A617                 mov     [esp+0A8h+arg_8], esi
    .text:0048A61E                 mov     [esp+0A8h+arg_C], edi
    .text:0048A625                 mov     [esp+0A8h+arg_10], 214h
    .text:0048A630                 mov     [esp+0A8h+arg_14], eax
    .text:0048A637                 mov     [esp+0A8h+arg_18], ecx
    .text:0048A63E                 add     esp, 0A8h
    .text:0048A644                 retn
    

    Zapisuje lokalne parametry na stosie funkcji po czym z niej wychodzi :P 

    3. Posługiwanie się 8 bitowymi rejestrami, gdy można skorzystać z 32 bitowych

    .text:0048A3F3                 movzx   ebx, [esp+0A8h+var_98]
    .text:0048A3F8                 cmp     bl, 0
    .text:0048A3FB                 jz      short loc_48A455
    

    4. Jako jedyny kompilator na świecie sprawdza czy rejestr jest zerowy używając cmp zamiast test

    .text:0048A412                 cmp     ecx, 0
    .text:0048A415                 jz      short loc_48A419
    

    5. Używa niepotrzebnie instrukcji CLD oraz barier UD2 po wywołaniu wyjątku

    .text:00423350                 mov     ecx, large fs:14h
    .text:00423357                 mov     ecx, [ecx+0]
    .text:0042335D                 cmp     esp, [ecx+8]
    .text:00423360                 jbe     short loc_423395
    .text:00423362                 sub     esp, 10h
    .text:00423365                 mov     ebx, runtime_sliceError.tab
    .text:0042336B                 mov     [esp+10h+i.tab], ebx ; i
    .text:0042336E                 mov     ebx, runtime_sliceError.data
    .text:00423374                 mov     [esp+10h+i.data], ebx
    .text:00423378                 call    runtime_convI2E
    .text:0042337D                 lea     ebx, [esp+10h+var_8]
    .text:00423381                 cld
    .text:00423382                 mov     ecx, [ebx]
    .text:00423384                 mov     [esp+10h+i.tab], ecx ; e
    .text:00423387                 mov     ecx, [ebx+4]
    .text:0042338A                 mov     [esp+10h+i.data], ecx
    .text:0042338E                 call    runtime_gopanic
    .text:00423393                 ud2
    

    6. Nie potrafi wykorzystać wyników operacji logicznych do sprawdzania stanu rejestru (0 czy nie)

    .text:004020A9                 mov     ebx, ebp
    .text:004020AB                 and     ebx, 20h
    .text:004020AE                 cmp     bl, 0
    .text:004020B1                 jnz     short loc_402116
    

    Tutaj zbędna jest operacja cmp.

    Nie jest to kompilator najwyższych lotów i brakuje mu lata świetlne do LLVM i Intel-a.

  3. Musisz dodać obsługę komend WM_COMMAND, czyli np. ktoś klika na button WM_COMMAND to przechwytuje, sprawdzasz ID kontrolki, z której wyszedł klik i wtedy odpowiednio reagujesz np. SetDlgItemText(hDialog, IDC_KONTROLKA, text);

    Do komunikowania się z kontrolkami okna wystarczy Ci aktywny uchwyt okna czyli w tym wypadku hDialog.

  4. phpBB dawno nie było aktualizowane, jednak jeśli chodzi o największą plagę czyli exploity także od bardzo dawna nie było żadnych luk dla tego systemu.

    Jeśli myślisz o czymś komercyjnym to polecam XenForo lub IPB. Na oba te systemy widziałem darmowe shoutboxy.

    Jeśli darmowe to SMF 2 lub MyBB.

    Sprawdź sobie też czy temat forum współgra z urządzeniami mobilnymi, to chyba obecnie największy trend i nie można o tym zapominać.

     

  5. Jak zauważyliście lub też nie, forum zostało zaktualizowane do najnowszej wersji systemu Invision Power Board.

    Główną nowością są "Kanały Aktywności", które zastąpiły nową treść. Można je swobodnie modyfikować do swoich potrzeb.

    Dla nas ważne są także zmiany wprowadzone w edytorze kodu, w końcu doszła opcja pozwalająca na wklejanie kodu bez jakiegokolwiek podświetlania.

    Jeśli macie jakieś pytania lub uwagi, piszcie śmiało.

    Obecnie dodaję tłumaczenia dla brakujących elementów interfejsu.

     

  6. Od ponad 2 lat programuje zawodowo w Javie, okazyjnie w Scali, wbrew pozorom nie jest nas aż tak mało :)

    Patrząc na rynek można odnieść wrażenie, że jedynie w HR pracują kobiety, wystarczy spojrzeć na ogłoszenia o pracę po GoldenLine czy na grupach Facebooka. Być może rzadko się ujawniają :)

  7. Cześć, jestem Ania, rok temu podjęłam decyzję o przebranzowieniu i rozpoczęciu nauki programowania. Pracuję w javie, prowadzę bloga o programowaniu i IT i przede wszystkim mam z tego fun. Jest nas trochę w branży i całkiem fajnie sobie radzimy :)

    Daj linka do bloga, zawsze to rodzynek i inne spojrzenie :)

  8. Skoro już dogrzebałam się do tego wątku dzięki Bartoszowi ;) to powiem tak: kobiet programujących zawodowo, w firmie lub na zleceniu - nie znam. Ale też nie jestem z branży deweloperskiej więc trudno żebym znała :D Sama zajęłam się Pythonem nie tak dawno i robię to raczej hobbystycznie - sprawia mi to frajdę. Pewnie liczba kobiet programujących zawodowo się zwiększy - takie czasy i słusznie: każdy ma prawo robić to co lubi i chce robić.

    Czemu akurat Python?

  9. To nie jest takie oczywiste, żeby używać, mi też jest łatwiej czytać źródło i widzieć jakie typy danych są zadeklarowane, a nie domyślać się po późniejszym patrzeniu na konstruktory. Jak var to lenistwo to co dopiero PHP :)

  10. Musisz je tworzyć globalnie, a nie w obrębie jednej funkcji, jeśli chcesz z nich korzystać w późniejszych elementach gry.

    W C++ możesz utworzyć listę lub wektor zawierający wszystkie elementy. Pamiętaj żeby zadeklarować go np. jako element w klasie gry np.

    class gra {
    
        std::vector<TYP_PRZESZKODY> lista_przeszkod;
        
        void dodaj_przeszkode(TYP_PRZESZKODY &przeszkoda);
    
        ...
    }

     

×
×
  • Utwórz nowe...