Zdjęcie w tle

ZohanTSW

Fanatyk
  • 722wpisów
  • 9484komentarzy

Historia o C++

#automotive to stan umysłu. Nie pracowałem wcześniej w automotive, szczerze mówiąc nie znam reguł tych autosarów, a do projektu trafiłem dość przypadkiem. Po prostu znam wiele reguł programowania i dobrych praktyk i okazuje się, że nawet daję radę. Automotive miałem za dział w którym naprawdę dba się o jakość kodu, no bo kurde, jednak ktoś kiedyś może umrzeć XD ale co się wydarzyło, czego się nauczyłem:

Robię przegląd kodu na finiszu cyklu wydawniczego (korp. przedreleasowe review). Jest sobie funkcja, jako parametr przyjmuje inta i widzę że ten int jest bezrefleksyjnie, bez żadnego sprawdzania rzutowany na na typ enum class. No i cyk, mamy to, tak się nie robi, z tego co wiem, standard nie opisuje co ma się zadziać gdy enum zawiera wartości 1 i 2, a my chcemy rzutować wartość 3 na ten enum - innymi słowy, używamy wartości spoza zakresu. Z tego co wiem, nazywa się to "undefined behavior" i unika się takich rzeczy, no bo teoretycznie każdy kompilator może dowolnie przetworzyć taką operację i nie ma pewności co z tego wyjdzie.

Poprawiam więc aby było po bożemu, ze sprawdzaniem wartości, odpalam testy i co? Nie przechodzą! Sprawdzam scenariusze testów, a tam na legalu, gość sumuje praktycznie wszystkie wartości tego enuma w zmiennej typu int i woła tą funkcję, co w efekcie jest właśnie jawnym gwałceniem tego, co napisałem xD

Okazuje się, że to nie jedyny przypadek, bo są inne testy, które robą podobną rzecz. Wychodzi na to, że możemy w praktyce pakować do jednej zmiennej co się da, bo każda zmienna enuma to inna flaga, a potem maskujemy ją i patrzymy w tej zmiennej jakie flagi są włączone. No wszystko fajnie, ale enum przecież nie do tego służy xD więc albo scenariusze są wadliwe, albo design. Napisałem więc do autora by spytać, co miał na myśli, a ten na to, że wszystko jest w porządku i tak ma być.


Otóż w automotive jest wzorzec zwany flag enum i dosłownie gwałci się enuma w ten sposób, chociaż moim zdaniem powinno się inaczej rozwiązywać tego typu zagadnienie. Niesamowita sprawa, mózg rozjebany. Poniżej wątek na stackoverflow, który prezentuje takie podejście xD

Jestem teraz ciekaw ile analizatorów kodu rozumie taką konstrukcję i ją przepuszcza. Ale też podejrzewam, że ten "undefined behavior" w takim razie jest martwy, bo co najmniej IAR czy inne kompilatory automotive, jasno wiedzą co z tym zrobić. Dlaczego więc GCC czy Clang miałby nie wiedzieć?


https://stackoverflow.com/questions/1448396/how-to-use-enums-as-flags-in-c


#cpp #c #programowanie #programista15k

@ZohanTSW ale że flagi po prostu? Toż to jest starsze niż języki wysokopoziomowe i używane jest praktycznie wszędzie.

W C# jest nawet specjalny atrybut [Flags] dla enumów.

@MostlyRenegade no cóż, jak używałem zmiennej jako flag to używałem normalnej zmiennej a nie typu enumeracyjnego. Można np też użyć struktury z polem bitowym. Jest sporo alternatyw i moim zdaniem używanie enuma w ten sposób nie jest najlepszym rozwiązaniem

@ZohanTSW użycie enuma ma tę zaletę, że masz od razu ograniczenie zakresu i nie musisz posługiwać się magicznymi liczbami.

O UB też nie ma się co martwić, bo pod spodem enuma i tak masz inta. Konwersja jest więc bezproblemowa. Co najwyżej poleci exception jeśli będziesz próbował podstawić pod enuma wartość spoza zakresu. A to jest nawet lepsze niż podstawienie wartości spoza zakresu pod zwykłego inta, bo jak operujesz intem, to program nawet nie wie, że jest poza zakresem i operuje na śmieciach.

@ZohanTSW Enumy w C++ to w zasadzie niewiele więcej niż sterta stałych, niestety, enum class jest już trochę lepszy, ale jak chcesz w C++ coś zgwałcić to masz do tego zawsze narzędzia. Szczerze mówiąc to ja bym takich rzeczy nie wpuścił, bo to jest zło, ale nie przeorasz kodu który już istnieje i polega na takich trickach. Sprawdź tylko czy enum class bazuje na int (domyślnie), bo nie musi : P.

A Automotive to tylko działka, przyjmują tam wszystkich co znają odpowiednie technologie.


Ostatnio dużo się robi w Rust np : >

@baklazan wszystko prawda. Tak, ten enum class dziedziczył z uint32_t.

Co do Rusta, to niestety, programiści są, ale nie znajdziesz pracy poza crypto. Chyba że będzie jakiś biały kruk xd

Zaloguj się aby komentować

@aerthevist Motoryna już 3 razy z rzędu została Mistrzem Polski i są po raz 4 w finale. A Motor Lublin to klub bardzo mocno wspierany przez spółki skarbu państwa i stać ich było na zbudowanie absolutnie bezkonkurencyjnego zespołu.

Aktualnie Toruń ma konkurencyjny zespół, z Patrykiem Dudkiem w życiowej formie, dodatkowo tor w Toruniu jest mimo wszystko niewygodny dla Motoru i zdarza im się tam zebrać bęcki. Dodatkowo Przyjemski, genialny junior z Motoru jest kontuzjowany co dodatkowo zwiększa szanse by utrzeć nosa Motorynie, czego chce cała Polska wraz z Panem Jezusem.

A po stronie Motoru spółka skarbu państwa i komentator Dryła, który jest z Lublina xd

@ZohanTSW widać, że jestem mocno nie w temacie, bo pamiętam jak wczoraj, że Toruń rozpaczliwie walczył o utrzymanie (do tego stopnia, że na mszach modlono się o utrzymanie xD)

@ZohanTSW Jako lubelak, mimo że żużel obchodzi mnie tyle co zeszłoroczny śnieg, czuję się w obowiązku: nie zejsraj się ( ͡~ ͜ʖ ͡°)

Zaloguj się aby komentować

@KierownikW10 dokładnie, Hamilton już po połowie sezonu uważa się za ogura, a klekle stabilna forma psychiczna. A nie zapomnajmy grande strategii w Monaco "box box stay out" - po tym incydencie dalej twardo jeździ.

Chłop mógłby prowadzić wykłady o odporności psychicznej dla Hamiltona

Zaloguj się aby komentować

Zaloguj się aby komentować

Dowiedziałem się dzisiaj o czymś takim jak pizza index.

Jak coś grubego się dzieje na świecie, znacząco wzrasta liczba zamówień w waszyngtońskich pizzeriach, tych wokół Pentagonu. Dzieje się tak, bo pracownicy Pentagonu muszą wtedy zostać do późna w pracy i jako posiłek wybierają tanią i szybko dostępną pizzę.


Więc jest stronka do monitorowania zamówień w pizzeriach i można sprawdzić, czy aktualnie dzieje się coś grubego czy nie XD


https://www.pizzint.watch/


Tak, dzisiejszej nocy (waszyngtońskiego czasu) index urus


#ciekawostki #trochepolityka

Zaloguj się aby komentować

Zaloguj się aby komentować

Zaloguj się aby komentować

Zaloguj się aby komentować

Zaloguj się aby komentować

Zaloguj się aby komentować

Zaloguj się aby komentować

Nie wiem czy już czegoś nie pamiętam czy to kwestia MT2.5 ale dostałem wpierdol od Wrzoda xDDDDDDDDDDD

10 siły, mieczyk 16 obrażeń i nie przebijam się przez jego pancerz xD co więcej, gdy go uderzyłem to nie uciekł, tylko zaczął mnie bić!


2 hity i leżę


#gothic

@BoJaProszePaniMamTuPrimaSorta jeszcze się nie wkurwiłem, ale chyba balans ekonomiczny jest przesrany. Spróbuję nauczyć się oprawiania zwierząt i może handlowanie trofeami ma więcej sensu, ale większość rzeczy które chcesz sprzedać jest warte psi chuj. Najbardziej się opłaca sprzedawać strzały i bełty, bo tego jest dużo i otrzymuje się uczciwą 1 bryłkę za 1 strzałę. A przy nauce czegokolwiek jest np 150 bryłek za 10 siły. Skąd te pieniądze wytrzasnąć?


Fajnie że już trochę poczyściłem mapę i już mniej trofeów jest do zebrania XD

Zaloguj się aby komentować

Zaloguj się aby komentować

Zaloguj się aby komentować

Zaloguj się aby komentować

Szanowni Państwo


Jeśli planujecie rozpocząć nową przygodę z Gothikiem, poczekajcie chwilę. Otóż Mroczne Tajemnice 2.5 PRAWDOPODOBNIE BĘDĄ DOSTĘPNE JUTRO.


Skąd wiem?


2 dni temu pojawił się wpis w moddb https://www.moddb.com/mods/mroczne-tajemnice-25

ale jeszcze tam nic nie ma.


Ale wlazłem na film dotyczący MT2.5 na kanale autora i tam pojawił się komentarz NO KIEDY, a autor odpisał najbliższa niedziela na 99%, a tak się dziwnie składa, że najbliższa niedziela jest jutro


@Whoresbane


#gothic

aeaae53e-c4aa-44bf-a572-c2eb2b0565a0

Zaloguj się aby komentować

Zaloguj się aby komentować

Jakie to jest nieudane gówno te geberity i kible w zabudowie... Chyba że ktoś użył mózgu i można się dobrać do środka bez rozpieprzania wszystkiego - np przez zrobienie którejś płytki na magnes.


Wszystko jest pięknie, dopóki spłuczka się nie spierdoli. W normalnym sedesie podnosisz wieko i można sprawdzić co jest nie tak. Jak trzeba wymienić spłuczkę to nie ma większego problemu. A w takim zabudowanym kiblu? Nic nie zobaczysz, trzeba robić na ślepo, a wymiany spłuczki sobie nie wyobrażam. Znaczy się mam nadzieję że konstrukcja jest zupełnie inna niż w tradycyjnym kiblu i nie jest to jakieś bardzo trudne. Mam też nadzieję, że obejdzie się bez rozbierania zabudowy.


#zalesie #kibel

bd78a820-26de-4111-b40e-e2fc894a1ab6

@ZohanTSW mam geberita. Normalnie go serwisowalem przez otwór i nawet się nie zbytnio nie gimnastykowalem. Ale to Twoje nie wygląda na Geberita.

Zaloguj się aby komentować

Zaloguj się aby komentować

Lem to świr. Co trzeba mieć w głowie by wymyślić Cyberiadę? Chyba trzeba umieć wykorzystywać wyobraźnię jak pięciolatek i jednocześnie mieć obszerną wiedzę techniczną. Niesamowita mieszanka, gość jest niemożliwy. Nie czułem nigdy czegoś takiego jak teraz - że nie byłbym w stanie wymyślić takich opowieści. Ta abstrakcja przebija moje dziwne skojarzenia i abstrakcje którymi jestem w stanie operować.

Geniusz.


#ksiazki #lem #stanislawlem

dbc2202e-d4ca-478b-84f2-999aa31bc70f

@ZohanTSW miałem awersję do tego bo chyba w szkole to była lektura? ale se czytnę


Cixin Liu to taki chiński Lem. Z tym że Lem wynalazł już wszystko w latach >50 ubiegłego wieku: e-booki, audiobooki, VR, AI, internet i wyszukiwarki, inżynierię genetyczną, nanotechnologię, drony i BCI


ten facet był totalnie niesamowity

Zaloguj się aby komentować