Architektura Systemu – Między Ideałem a Koniecznością Biznesową
|

Architektura Systemu – Między Ideałem a Koniecznością Biznesową

Grudniowy meetup (relacja tutaj) zapoczątkował ciekawą dyskusję na temat dziedziczenia w C++, interfejsów duplikacji kodu i czy czysty kod według Uncle Boba ma zastosowanie w środowisku embedded. Zainspirowany tą debatą postanowiłem podzielić się z Wami swoimi refleksjami. We wcześniejszym wpisie odniosłem się bardziej do kwestii związanych z C++, wydajnością i czystym kodem. Dzisiaj biorę na…

Clean Code, Horrible Performance. Czy aby na pewno?
|

Clean Code, Horrible Performance. Czy aby na pewno?

Jakiś czas temu wielką popularność zdobyło nagranie Casey Muratori “Clean Code, Horrible Performance” jeżeli jeszcze nie znasz, polecam obejrzeć! Autor stawia tam obrazoburczą tezę, że popularne zasady Clean Code przynoszą więcej szkody niż pożytku. A w szczególności powodują ogromny spadek wydajności. W tym artykule zapoznamy się z jego argumentami i zastanowimy się, czy mają zastosowanie…

Obsługa zależności czasowych
|

Obsługa zależności czasowych

Jakiś czas temu otrzymałem na maila takie pytanie: Czy jest jakaś elegancka metoda, aby zarządzać zdarzeniami czasowymi w systemie?Generalnie unikamy delay’ów i odnosimy się np. do zegara systemowego. Aby uruchomić daną komendę/operację/funkcję w konkretnym momencie czasowym używamy IF-ów. Sprawa się komplikuje jeśli chcemy powiązać czasowo różne zdarzenia w systemie. Oto przykład: chcemy aby:1. Zdarzenie X było…

Jak zaimplementować obsługę różnych języków w menu?
|

Jak zaimplementować obsługę różnych języków w menu?

Czasami tak bywa, że sukces produktu niesie nowe wyzwania dla programistów. Jednym z takich wyzwań może być przetłumaczenie tekstów wyświetlanych w menu na inne języki i obsługa tego w prosty i niezawodny sposób. W dzisiejszym wpisie pokażę jak ustrukturyzować kod zawierający menu i jak łatwo zaimplementować tłumaczenia wykorzystując tablice.

|

Dlaczego w C const nie może być rozmiarem tablicy?

W C++ trwają starania, żeby praktycznie nigdy nie trzeba było korzystać z preprocesora. Jednym z typowych zastosowań define w C jest deklarowanie stałych będących rozmiarami tablic. W C++ od dawna możemy używać w tym celu const, a od jakiegoś czasu (dokładniej od C++11) również constexpr. Jednak kiedy zechcemy przenieść te praktyki do C czeka nas…

|

Inicjalizacja struktur

Ostatnio było o inicjalizacji tablic, dzisiaj pora na struktury. Ostatnio zdarzył mi się projekt, gdzie kompilator nie wspierał inicjalizacji z podawaniem nazwy pól. Dlatego pomyślałem, że dobrze będzie zebrać w jednym miejscu opcje inicjalizacji, od jakich standardów są dostępne i co się dzieje, kiedy nie podamy wartości dla wszystkich pól.

|

Inicjalizacja tablic

Jakiś czas temu widziałem taki kod inicjalizujący tablicę: Celem autora było zainicjalizowanie wszystkich elementów tą samą wartością. Pewnie dla wielu z Was błąd w tej linijce wyda się oczywisty. Ale skoro inicjalizuje wszystkie wartości na zero, to można pomyśleć, że analogiczny zapis inicjalizuje wszystko na -1. Niestety tylko indeks zerowy przyjmie wartość -1, natomiast cała…

Compiler explorer – Twój najlepszy przyjaciel w rozmowach o wydajności kodu
|

Compiler explorer – Twój najlepszy przyjaciel w rozmowach o wydajności kodu

W artykułach o sprytnym kodzie i mikrooptymalizacjach postawiłem tezę, że często większa wydajność kodu, którą usprawiedliwiamy zmniejszenie czytelności, jest fikcją. Aby to stwierdzić potrzebujemy danych. Tymi danymi są czas wykonania aplikacji i kod asemblerowy generowany przez kompilator. Dzisiaj opiszę narzędzie przeglądarkowe pozwalające nam analizować właśnie kod asemblerowy. A jest nim Compiler Explorer.

End of content

End of content