Jakub L.

Jakub L. Programista

Temat: Kurs programowania C++

Szymon Kubisiak:
ugh. Pracując 6 lat na różnych wersjach MSVC nie widziałem takiego efektu jak mówisz nigdy. Pracując od 3 miesięcy na Carbide (będącym wersją Eclipsa) widywałem ten efekt nieustannie...
(dopóki nie zamieniłem na #ifndef)

A ja codziennie :(
Artur Kęska:
Aha, i nie zgodzę się z Szymonem - jak chcesz uczyć się C++ i programowania obiektowego, to nie zaczynaj od C - okropne nawyki ludziom po tym zostają.

Nawyki by nie używać templatów, 10piętrowego dziedziczenia, STLa, boosta dopóki nie są potrzebne?

Nie STLowi? To się nazywa nawyk niestrzelania z armaty do wróbla oraz (jeszcze lepszy) nie będziemy tego rozwijać i ostateczny a jak będziemy, to przepiszemy.
Z których to nawyków wychodzi nieodmiennie żałość jak okazuje się, że program jednak się rozwija na teraz zaraz naraz.
I zawsze jest czas na poprawki albo dodawanie nowych ficzerów, a nie ma go nigdy na przepisanie już istniejącego i przetestowanego kodu.
Oczywiście że jest prostsze. Dla kogoś kto przygodę z programowaniem zaczął od stdout << "hello" << "
> world"; (hmm, skąd się wziął operator string << > string ? ) albo od rozwiązania zagadki dlaczego

Wiązanie operatorów przecież jest wszędzie, czy się tego uczy na przykładzie C++ czy C to nie ma różnicy.
class CFoo foo = 5;
a
class CFoo foo;
foo = 5;


generują kompletnie inny kod - dla zaprawionego w takich bojach wszystko już jest proste.

Ale to ogólnie jest proste. Przyznaję że musiałem sprawdzić, bo to pierwsze wyglądało mi na to samo co drugie, ale g++ od razu to zoptymalizował do postaci CFoo foo(5) zamiast wołania konstruktora bezparametrowego a potem kopiującego obiekt tymczasowy.
Po prostu w C wszystko jest tym na co wygląda, dlatego polecam go do nauki. No, ale ja uważam że naukę pływania lepiej zacząć od styropianowej deski niż stalowej kuli. Nie trzeba się z tym zgadzać :)

Ale potem nie pisze się class CFoo foo tylko CFoo foo, bo struct przed nazwą typu to pozostałość z C.
Jak to ponoć Stroustrup powiedział - w C++ trudniej jest odstrzelić sobie stopę niż w C, ale jak już się uda, odstrzelona jest pod samym kolanem.
Stawiasz sprawę na głowie. Właściwie postawiony problem brzmi : po co zaprzęgać skomplikowane technologie, skoro prostsze dają radę?

KISS, ważniejsze od każdej książki i kursu :)

I jeszcze ponoć YAGNI. Ale nieszczególnie się zgadzam z Atwoodem w niektórych kwestiach (to jest jedna z).

Skoro mam już dane koła w bibliotece standardowej to nie będę wymyślał ich od nowa. Kontenery z STLa są bardzo przyjemne i o udokumentowanych właściwościach.
Wymyślanie ich od nowa w ramach KISS to marnowanie czasu na wymyślanie, oraz później na przepisywanie wymyślonego potworka do czegoś zgodnego ze standardem, na czym się daje pracować, albo utrzymywaniem tego brązowego spagetti.
Odpowiednio długo stosowana konwergencja spowoduje wynalezienie w końcu jakiegośrodzaju kontenerów. TYlko po co, skoro już są a drzwi są otwarte.

O, takie podejście nazywa się syndromem NIH.

A tak to bierze się odpowiedni header, dołącza i się ma. Jak się nauczyło a nie przyzwyczaiło się do partyzantki w C.

konto usunięte

Temat: Kurs programowania C++

Paweł Bochacik:
Mam jeszcze jedno pytanie : czy wie ktos może czy Eclipse umie kompilowac kod źródłowy Matlaba tak jak Fortrana ?? Bardzo mnie to interesuje bo już pisałem troche na studiach w tym języku.

Najlepiej poszukaj czegoś nt. Octave (darmowy odpowiednik Matlaba):

http://www.gnu.org/software/octave/
http://lnc.usc.edu/~holt/matwrap/Piotr Likus edytował(a) ten post dnia 28.05.09 o godzinie 10:02

Temat: Kurs programowania C++

wymyślał ich od nowa. Kontenery z STLa są bardzo przyjemne i o udokumentowanych właściwościach.
Wymyślanie ich od nowa w ramach KISS to marnowanie czasu na wymyślanie, oraz później na przepisywanie wymyślonego potworka do czegoś zgodnego ze standardem, na czym się daje pracować, albo utrzymywaniem tego brązowego spagetti.
Chyba, ze "udokumentowane wlasciwosci" nas nie zadowalaja. Dlatego wiele firm pisze jednak wlasne odpowiedniki przynajmniej czesci STL.

konto usunięte

Temat: Kurs programowania C++

Maciej Siniło:

Chyba, ze "udokumentowane wlasciwosci" nas nie zadowalaja. Dlatego wiele firm pisze jednak wlasne odpowiedniki przynajmniej czesci STL.

Jakie "udokumentowane wlasciwosci" STL mogą być na tyle niezadowalające, że nawet Boost nie pomoże i trzeba implementować część rzeczonego STL?

konto usunięte

Temat: Kurs programowania C++

Maciej Siniło:
wymyślał ich od nowa. Kontenery z STLa są bardzo przyjemne i o udokumentowanych właściwościach.
Wymyślanie ich od nowa w ramach KISS to marnowanie czasu na wymyślanie, oraz później na przepisywanie wymyślonego potworka do czegoś zgodnego ze standardem, na czym się daje pracować, albo utrzymywaniem tego brązowego spagetti.
Chyba, ze "udokumentowane wlasciwosci" nas nie zadowalaja. Dlatego wiele firm pisze jednak wlasne odpowiedniki przynajmniej czesci STL.

Jak się w grach robi to pewnie STL często nie pasuje. W końcu to biblioteka ogólnego przeznaczenia (czyt. optymalna nieszczególnie).
Szymon Kubisiak

Szymon Kubisiak Developer aplikacji
mobilnych Android

Temat: Kurs programowania C++

Tomasz Krzal:

Jakie "udokumentowane wlasciwosci" STL mogą być na tyle niezadowalające, że nawet Boost nie pomoże i trzeba implementować część rzeczonego STL?

Uhm, np. dawny memory leak w vectorze? Już poprawiony, niemniej dowodzi że STL nie jest niepokalany.
Po drugie - nie ma czegoś takiego jak STL. Jest konkretna implementacja STLa której używasz, i jedna od drugiej się potrafi różnić bardzo wiele.

Widzę że panowie nie czytają tematów na tym forum, już raz pisałem o fantastycznej mikrosoftowej implementacji STLa multithreaded gdzie każdy kontener ma semafor i nim majta przy każdej operacji. Oczywiście w niczym to nie eliminuje międzywątkowych kolizji, za to świetnie spowalnia i stwarza deadlocki.

Jakub L.:
A ja codziennie :(
Już to pisałeś na samym początku.
Nie STLowi? To się nazywa nawyk niestrzelania z armaty do wróbla oraz (jeszcze lepszy) nie będziemy tego rozwijać i ostateczny a jak będziemy, to przepiszemy.
Z których to nawyków wychodzi nieodmiennie żałość jak okazuje się, że program jednak się rozwija na teraz zaraz naraz.
I zawsze jest czas na poprawki albo dodawanie nowych ficzerów, a nie ma go nigdy na przepisanie już istniejącego i przetestowanego kodu.

Demonizujesz. Nie mówię w żadnym razie o fanatycznym lęku przed biblioteką (doh, strcpy to też obcy kod!), tylko o używaniu na siłę do rzeczy do których nie jest potrzebne. Jak tworzenie listy na jeden obiekt czy trzymanie stlowych stringów, w sytuacji gdzie i tak używa się ich wyłacznie do bibliotek przyjmujących char*.
W tej chwili nic mi nie przychodzi na myśl, ale pamiętam że miałem sytuacje gdzie chciałem na STLowej liście zrobić coś co wg. mnie jest dla listy "oczywiste" a akurat template jakiego użyto nie umożliwiał tego i kropka.

Oczywiście że jest prostsze. Dla kogoś kto przygodę z programowaniem zaczął od stdout << "hello" <<
> > "world"; (hmm, skąd się wziął operator string << > > string ? ) albo od rozwiązania zagadki dlaczego

Wiązanie operatorów przecież jest wszędzie, czy się tego uczy na przykładzie C++ czy C to nie ma różnicy.

W C int + int to zawsze int.
W C++ Foo + Bar to czasem Bar, czasem Foo a czasem pies.
Różnica jest taka że w C plus to jest plus a w C++ może być przedefiniowany i zrobić wrednego psikusa.
Jak już pisałem, zaprawiony w bojach to rozumie, n00b będzie miał problem.
class CFoo foo = 5;
a
class CFoo foo;
foo = 5;
>
Ale to ogólnie jest proste. Przyznaję że musiałem sprawdzić,
Nie, nie jest proste. Sam fakt że musiałeś sprawdzać dowodzi jak jest to cholernie nieproste.
bo to pierwsze wyglądało mi na to samo co drugie, ale g++ od razu to zoptymalizował do postaci CFoo foo(5) zamiast wołania konstruktora bezparametrowego a potem kopiującego obiekt tymczasowy.
NO WŁAŚNIE Chciałem tak ale wyszło inaczej. Rewelacja.
Po prostu w C wszystko jest tym na co wygląda, dlatego polecam go do nauki. No, ale ja uważam że naukę pływania lepiej zacząć od styropianowej deski niż stalowej kuli. Nie trzeba się z tym zgadzać :)

Ale potem nie pisze się class CFoo foo tylko CFoo foo, bo struct przed nazwą typu to pozostałość z C.

Nieprawda, to nie jest pozostałaość z C tylko skrót myślowy.
Nigdy nie pisałem kodu w składni C. Jako "pisanie w C" rozumiem "C++" bez odwoływania się do koncepcji nowych w plusach. Argument kulą w płot, zresztą czepianie się detali składni uważam za głupie. Od tego jest kompilator, a nie człowiek.
Jak to ponoć Stroustrup powiedział - w C++ trudniej jest odstrzelić sobie stopę niż w C, ale jak już się uda, odstrzelona jest pod samym kolanem.

Mi to wygląda na taką samą urban legend jak to że wymyślił C++ tylko daltego że C był zbyt łatwy i potężny. Akurat przykład z konstrukcją obiektu pokazuje jak łatwo można sobie odstrzelić stopę
i nawet nie wiedzieć gdzie.
Stawiasz sprawę na głowie. Właściwie postawiony problem brzmi : po co zaprzęgać skomplikowane technologie, skoro prostsze dają radę?

KISS, ważniejsze od każdej książki i kursu :)

I jeszcze ponoć YAGNI. Ale nieszczególnie się zgadzam z Atwoodem w niektórych kwestiach (to jest jedna z).

Skoro mam już dane koła w bibliotece standardowej to nie będę wymyślał ich od nowa. Kontenery z STLa są bardzo przyjemne i o udokumentowanych właściwościach.
Widzę że nie miałeś do czynienia z więcej niż jedną implementacją STLa. Każda ma inne właściwości i zupełnie nieudokumentowane (nie żeby stdlib był tu nieskalany).
Wymyślanie ich od nowa w ramach KISS to marnowanie czasu na wymyślanie, oraz później na przepisywanie wymyślonego potworka do czegoś zgodnego ze standardem, na czym się daje pracować, albo utrzymywaniem tego brązowego spagetti.

To że Ty nie potrafisz zaprojektować i utrzymać własnego kodu świadczy tylko o tym że za rzadko to robisz...

Odpowiednio długo stosowana konwergencja spowoduje wynalezienie w końcu jakiegośrodzaju kontenerów. TYlko po co, skoro już są a drzwi są otwarte.

Tylko po to że ich autor nie był mną, nie myślał jak ja i nie rozwiązywał tych problemów co ja teraz.
Każde gotowe rozwiązanie jest odpowiedzią na jakiś problem, niestety kiedy wykraczasz poza ten problem, rozwiązanie przestaje pasować.
O, takie podejście nazywa się syndromem NIH.

A tak to bierze się odpowiedni header, dołącza i się ma. Jak się nauczyło a nie przyzwyczaiło się do partyzantki w C.

Partyzantka w C to jest pisanie bez stdliba :) ( co zresztą jest praktykowane na małych urządzeniach). Ponownie wypaczasz moje słowa, nie mówię o zakazie używania istniejących rozwiązań, lecz o niestosowaniu ich tam gdzie nie pasują.

STL jest tylko narzędziem i jak każde narzędzie jest dobre tylko do tego, do czego jest dobre (sic).
Sztuka polega na odróżnieniu róznych sytuacji od siebie i nie używaniu młotka do śrub tylko dlatego że kiedyś do gwoździ pasował.

Ta dyskusja jest bez sensu, autor już przeszedł na rozważania nad fortranem.Szymon Kubisiak edytował(a) ten post dnia 28.05.09 o godzinie 19:01
Jakub L.

Jakub L. Programista

Temat: Kurs programowania C++

Maciej Siniło:
wymyślał ich od nowa. Kontenery z STLa są bardzo przyjemne i o udokumentowanych właściwościach.
Wymyślanie ich od nowa w ramach KISS to marnowanie czasu na wymyślanie, oraz później na przepisywanie wymyślonego potworka do czegoś zgodnego ze standardem, na czym się daje pracować, albo utrzymywaniem tego brązowego spagetti.
Chyba, ze "udokumentowane wlasciwosci" nas nie zadowalaja. Dlatego wiele firm pisze jednak wlasne odpowiedniki przynajmniej czesci STL.

Ale ma podstawy aby, a nie dlatego, że tak się podoba, bo będzie wymyślone i napisane tutaj.
Jakub L.

Jakub L. Programista

Temat: Kurs programowania C++

Jakub L.:
Demonizujesz. Nie mówię w żadnym razie o fanatycznym lęku przed biblioteką (doh, strcpy to też obcy kod!), tylko o używaniu na siłę do rzeczy do których nie jest potrzebne.

Nie na siłę. Jeżeli potrafię coś zrobić 2x szybciej używając biblioteki to czemu mam tego nie robić? Bo nie wymyślone tutaj?

Jak
tworzenie listy na jeden obiekt czy trzymanie stlowych stringów, w sytuacji gdzie i tak używa się ich wyłacznie do bibliotek przyjmujących char*.

Pierwszego nie widziałem, drugie - z brzegu to zarządzanie pamięcią zamiast ciągłego ręcznego strncpy i jego kolegów.
Oczywiście że jest prostsze. Dla kogoś kto przygodę z programowaniem zaczął od stdout << "hello" <<
> > >
"world"; (hmm, skąd się wziął operator string
<< > > string ? ) albo od rozwiązania zagadki dlaczego

Wiązanie operatorów przecież jest wszędzie, czy się tego uczy na przykładzie C++ czy C to nie ma różnicy.

W C int + int to zawsze int.

A czegoś innego nie można dodać jedno do srugiego. Taki pomysł.
W C++ Foo + Bar to czasem Bar, czasem Foo a czasem pies.
Różnica jest taka że w C plus to jest plus a w C++ może być przedefiniowany i zrobić wrednego psikusa.

No i? Definiowanie operatorów to taki fajny ficzer języka. A i tak nie jest tak posunięte jak w takim SMLu czy innych językach funkcyjnych, gdzie operator można sobie zdefiniować na przykład /\, i żeby był postfixowy. A w C++ jest ich tylko ograniczona liczba.
Jak już pisałem, zaprawiony w bojach to rozumie, n00b będzie miał problem.

To niech się uczy. Tylko bez sensu, żeby uczył się dookoła przez C, skoro może sobie przeczytać na przykład standard języka i wtedy będzie wiedział, gdzie znaleźć.
Ale to ogólnie jest proste. Przyznaję że musiałem sprawdzić,
Nie, nie jest proste. Sam fakt że musiałeś sprawdzać dowodzi jak jest to cholernie nieproste.

Nieproste było to, co zrobi kompilator - przyzwyczaiłem się do totalnej głupoty i robienia tego co się każe a nie tego co chce, a tutaj kompilator wyszedł frontem do klienta. Chciałem sprawdzić jak bardzo frontem, i wychodzi że bardzo bardzo. Miłe.
bo to pierwsze wyglądało mi na to samo co drugie, ale g++ od razu to zoptymalizował do postaci CFoo foo(5) zamiast wołania konstruktora bezparametrowego a potem kopiującego obiekt tymczasowy.
NO WŁAŚNIE Chciałem tak ale wyszło inaczej. Rewelacja.

Bo komputer ogólnie robi to co się mu każe a nie to co się od niego chce. A tutaj taka niespodzianka.
Zresztą na maszynach z duża ilością czasu i pamięci w programach pisanych przez dużo Hindusów takie rzeczy przejdą niezauważone.
Jak to ponoć Stroustrup powiedział - w C++ trudniej jest odstrzelić sobie stopę niż w C, ale jak już się uda, odstrzelona jest pod samym kolanem.

Mi to wygląda na taką samą urban legend jak to że wymyślił C++ tylko daltego że C był zbyt łatwy i potężny. Akurat przykład z konstrukcją obiektu pokazuje jak łatwo można sobie odstrzelić stopę
i nawet nie wiedzieć gdzie.

Całkiem rozpowszechnione to urban legend.
A właściwie to co ci odstrzeliwuje stopę podczas najpierw wywołania domyślnego konstruktora a potem kopiującego?
No chyba że ktoś własnoręcznie skwasił konstruktory, ale wtedy niekoniecznie jest to wina języka.
Skoro mam już dane koła w bibliotece standardowej to nie będę wymyślał ich od nowa. Kontenery z STLa są bardzo przyjemne i o udokumentowanych właściwościach.
Widzę że nie miałeś do czynienia z więcej niż jedną implementacją STLa. Każda ma inne właściwości i zupełnie

Miałem, Microsoftowa śmierdzi, ale lepsza taka niż żadna.
Biorę i nawet działa. I funkcje nazywają się tak samo.
Wymyślanie ich od nowa w ramach KISS to marnowanie czasu na wymyślanie, oraz później na przepisywanie wymyślonego potworka do czegoś zgodnego ze standardem, na czym się daje pracować, albo utrzymywaniem tego brązowego spagetti.

To że Ty nie potrafisz zaprojektować i utrzymać własnego kodu świadczy tylko o tym że za rzadko to robisz...

No rzadko, sam się zadziwiam, ale mój kod nie potrzebuje tak strasznie dużo utrzymywania.
I znowu mogę się dowiedzieć czegoś o swojej pracy :)
Odpowiednio długo stosowana konwergencja spowoduje wynalezienie w końcu jakiegośrodzaju kontenerów. TYlko po co, skoro już są a drzwi są otwarte.

Tylko po to że ich autor nie był mną, nie myślał jak ja i nie rozwiązywał tych problemów co ja teraz.

No i potem się okazuje, że te problemy nie były tak wyjątkowe jak się wydawało. Redukcja wielomianowa i takie tam.
Każde gotowe rozwiązanie jest odpowiedzią na jakiś problem, niestety kiedy wykraczasz poza ten problem, rozwiązanie przestaje pasować.

O, jak ulał pasuje do podejścia które opisywałeś, po co brać generyczne rozwiązania pasujące do wielu problemów, skoro można coś zrobić idealnei pasujące do problemu. Niestety kiedy wykraczasz poza ten problem, rozwiązanie przestaje pasować.
Partyzantka w C to jest pisanie bez stdliba :) ( co zresztą jest praktykowane na małych urządzeniach). Ponownie wypaczasz moje słowa, nie mówię o zakazie używania istniejących rozwiązań, lecz o niestosowaniu ich tam gdzie nie pasują.

Ale zakładasz, że nie pasują z samej definicji problemu, bo problem jest taki niesamowicie wyjątkowy. Sprowadzenie problemu do szeregu pozwala odwalić sporą część roboty.
Szymon Kubisiak

Szymon Kubisiak Developer aplikacji
mobilnych Android

Temat: Kurs programowania C++

Nie będę się dalej kłócił o pierdoły - Ty wciąż będziesz mi wciskał że NIGDZIE nie używam gotowych rozwiązań a ja pozostanę przy stanowisku że łatwiej jest zrozumieć rzecz prostą i spójną niż rozbudowaną i robiącą rzeczy za plecami programisty.

O twojej pracy uważam tylko to, co sam mi wcześniej napisałeś...

Temat: Kurs programowania C++

Tomasz Krzal:
Maciej Siniło:

Chyba, ze "udokumentowane wlasciwosci" nas nie zadowalaja. Dlatego wiele firm pisze jednak wlasne odpowiedniki przynajmniej czesci STL.

Jakie "udokumentowane wlasciwosci" STL mogą być na tyle niezadowalające, że nawet Boost nie pomoże i trzeba implementować część rzeczonego STL?
Alez prosze - cala lista - http://www.open-std.org/jtc1/sc22/wg21/docs/papers/200...
Nie wspomne o predkosci, bo ta rozni sie z implementacji na implementacje, ale czesto samemu i tak mozna to podtweakowac jeszcze bardziej. Shameless plug, ale chocby taka hash_mapa -- http://attractivechaos.wordpress.com/2008/10/07/anothe... - moja implementacja (RDE) bije te STL-owe dosyc konkretnie.

konto usunięte

Temat: Kurs programowania C++

Maciej Siniło:
Alez prosze - cala lista - http://www.open-std.org/jtc1/sc22/wg21/docs/papers/200...
Nie wspomne o predkosci, bo ta rozni sie z implementacji na implementacje, ale czesto samemu i tak mozna to podtweakowac jeszcze bardziej. Shameless plug, ale chocby taka hash_mapa -- http://attractivechaos.wordpress.com/2008/10/07/anothe... - moja implementacja (RDE) bije te STL-owe dosyc konkretnie.

A ja mam pytanie innej natury: w jaki sposób testujecie/porównujecie wydajności poszczególnych implementacji? Piszecie swoje własne benchmarki, czy istnieje może jakaś dobra gotowa alternatywa?

Temat: Kurs programowania C++

Krzysztof Kondrak:
A ja mam pytanie innej natury: w jaki sposób testujecie/porównujecie wydajności poszczególnych implementacji? Piszecie swoje własne benchmarki, czy istnieje może jakaś dobra gotowa alternatywa?
Standardu nie ma. Jest kilka gotowych rozwiazan (do hash_map na przyklad wlasnie szablon kolesia od Attractive Chaos). Zazwyczaj lepiej pewnie robic to samemu, bo najlepiej wiemy jakie konkretnie przypadki nas interesuja. Np. jezeli nigdy (rzadko) nie usuwamy obiektow z kontenerow, to nie ma sensu optymalizowac tego scenariusza za bardzo.

Następna dyskusja:

Kurs języka C++




Wyślij zaproszenie do