Wpis z mikrobloga

C++ to jednak nadjęzyk ( ͡° ͜ʖ ͡°) - w porównaniu do innych popularnych języków wysokiego poziomu ten można przy nich nazwać niskopoziomowym ( ͡° ͜ʖ ͡°). Nad wszystkim nad czym chcesz mieć kontrolę to ją masz, kompilator nie mówi ci jak masz żyć, nie napierdzielasz wywołań metod na 2 ekrany czcionką 12 na szerokość 1920 pikseli... Tu rzucisz wskaźnik, tu wyłuskanie, tu przeładowanie operatora - wszystko takie jakieś przejrzyste, lekkie i proste - w C++ czuję się jak Mickiewicz przy piórze ( ͡° ͜ʖ ͡°) A i kod jakiś taki krótszy się wydaje ( ͡° ͜ʖ ͡°)


#programista15k #cpp #pracbaza #zalesie #programowanie
  • 51
@NjeMjetek: i te wskaźniki przypadkowo wstawione przez literówkę.
I to szukanie błędu przez 2 tygodnie przeczesując żmudnie każdą linię w projekcie.

Normalnie żyć nie umierać.

P.S. O atrakcjach, jakie mieliśmy przy przesiadaniu się z architektury x86 na x64 to mi się nawet nie chce wspominać ( ͡° ͜ʖ ͡°)
P.S.2 Jak to dobrze, że ten gówno język dla masochistów odchodzi powoli w zapomnienie ( ͡° ͜
@tell_me_more: Ja staram się korzystać z std bo jest z nimi najmniej problemów (a że muszę zrezygnować z części funkcji pisanych dla C i char* i metod pisanych dla Q/O-Stringów to tworzy nowy problem znany jako "wyważanie otwartych drzwi" ( ͡° ͜ʖ ͡°).

@MamCieNaHita: I tak każdy wie o co chodzi ( ͡° ͜ʖ ͡°) Jeden typ zmiennej tablicowej + 4 klasy.
A z x86->x64 wszystko jest ok dopóki nie używasz funkcji z C (też się o tym kiedyś boleśnie przekonałem ( ͡° ʖ̯ ͡°)


@NjeMjetek: u nas na 2-3 ekranach waliło losowymi błędami na losowych komputerach, których nie dało się zreprodukować. Nie wiem co tam było pod środku, bo za krótko byłem w projekcie, ale decyzja biznesu przepisaliśmy to na C# ( ͡° ͜ʖ ͡°
@lionbest: chcesz wrapować API każdej biblioteki, która używa stringów, czy wrapować stringa i tworzyć 10 klasę do obsługi stringów z operatorami na każdy inny typ?

Żadna z tych opcji mi się nie uśmiecha, bo wrappery to też kod, i też trzeba go utrzymywać. Widziałem błędy spowodowane tym, że ktoś był sprytny, i zrobił operatory castowania między typami używanymi w aplikacji. Tylko zapomniał o kilku kombinacjach, i szły "na około", co skutkowało
Nawet standardowa biblioteka C++ popełnia ten błąd architektury i używa zarówno std::string, jak i const char*.


@tell_me_more: w którym miejscu to powoduje problemy? widziałem takie coś tylko w jedną stronę i wystarczy użyć std::string::c_str().
nie napierdzielasz wywołań metod na 2 ekrany czcionką 12 na szerokość 1920 pikseli...


@NjeMjetek: wat? Głównie w cpp spotkałem się z takimi potworkami, gdzie typ zmiennej był na długość 100 znaków (bo pseudo generyki vel. template, dodatkowo milion namespaceów). I tak teraz macie dobrze, bo w cpp11 chyba auto wprowadzili, tak to trzeba było #!$%@?ć typ, a potem przy definicji jeszcze raz ten typ...

wszystko takie jakieś przejrzyste, lekkie i proste
Próbowaliście Rusta? Bo jak nie, to sporo tracicie ;)


@fizyk20: próbowałem i nie potrafię się przekonać

bo pseudo generyki vel. template


@rzuf22: raczej generyki to pseudo template, zawsze mnie śmieszy, że trzeba w javie robić List zamiast List. w c# już to lepiej ogarnęli

I tak teraz macie dobrze, bo w cpp11 chyba auto wprowadzili, tak to trzeba było #!$%@?ć typ, a potem przy definicji jeszcze raz ten typ...


@
@MamCieNaHita: Pisze w C# (jak i również uważam C# > Java), tam mamy var od dawien dawna, tak samo jak ludzkie generyki, które są generykami, w przeciwieństwie do template, które tylko udają. Tak, wiem, taka specyfika języka, no ale cóż.

Chodzi mi o lekkość używania uniqueptr, sharedptr, i tak dalej. Rozumiem, że jak ktoś w tym siedzi to ogarnia mniej więcej który kiedy i czego nie wolno, ale wiem