eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingDlaczego w branży rozrywkowej najsłabiej płacą? › Re: Dlaczego w branży rozrywkowej najsłabiej płacą?
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!postnews.google.com!q12g20
    00yqe.googlegroups.com!not-for-mail
    From: Andrzej Jarzabek <a...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: Dlaczego w branży rozrywkowej najsłabiej płacą?
    Date: Thu, 13 Oct 2011 09:12:38 -0700 (PDT)
    Organization: http://groups.google.com
    Lines: 135
    Message-ID: <0...@q...googlegroups.com>
    References: <5...@n...onet.pl> <j6f0tl$f35$1@inews.gazeta.pl>
    <f...@j...googlegroups.com>
    <j6hra9$6qj$1@inews.gazeta.pl>
    <4...@t...googlegroups.com>
    <j6l5sd$5u$1@inews.gazeta.pl> <j6m0pc$pp6$1@inews.gazeta.pl>
    <j6sqj7$skh$1@inews.gazeta.pl> <j6tqei$hr2$1@inews.gazeta.pl>
    <j6u1ie$2ri$1@inews.gazeta.pl>
    <d...@5...googlegroups.com>
    <j6udri$b1b$1@inews.gazeta.pl>
    <a...@d...googlegroups.com>
    <j71a8c$cti$1@inews.gazeta.pl>
    <6...@p...googlegroups.com>
    <j725i2$7d5$1@inews.gazeta.pl> <j73f5k$en8$1@inews.gazeta.pl>
    <j755n8$1f6$1@inews.gazeta.pl> <j75bgq$cuh$1@inews.gazeta.pl>
    <j76a0i$nds$1@inews.gazeta.pl>
    NNTP-Posting-Host: 80.169.201.50
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: quoted-printable
    X-Trace: posting.google.com 1318522451 13699 127.0.0.1 (13 Oct 2011 16:14:11 GMT)
    X-Complaints-To: g...@g...com
    NNTP-Posting-Date: Thu, 13 Oct 2011 16:14:11 +0000 (UTC)
    Complaints-To: g...@g...com
    Injection-Info: q12g2000yqe.googlegroups.com; posting-host=80.169.201.50;
    posting-account=jr5y-woAAAAWidgVjrSJ6j8m650CTb-v
    User-Agent: G2/1.0
    X-Google-Web-Client: true
    X-Google-Header-Order: HUARLSCNK
    X-HTTP-UserAgent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like
    Gecko) Chrome/14.0.835.202 Safari/535.1,gzip(gfe)
    Xref: news-archive.icm.edu.pl pl.comp.programming:192755
    [ ukryj nagłówki ]

    On Oct 13, 10:10 am, Wojciech Jaczewski <w...@o...pl> wrote:
    > Andrzej Jarzabek wrote:
    >
    > > Kolejny problem z deskryptorami jest taki, że łatwo przez pomyłkę o kod,
    > > który w pewnych sytuacjach nie zamyka deskryptorów, które otwiera, np.
    > > na wskutek early return czy rzucenia wyjątkiem.
    >
    > Jeśli akurat mi w danym momencie na czymś takim zależy i akurat używam C++,
    > to robię klasę o nazwie fd_guard_t (analogiczną do lock_guard z nowego
    > standardu). I dalej operuję na nie-opakowanym deskryptorze.

    Lock guard jest specjalnie tak zrobiony, żeby ten sam lock mógł być
    używany po wyjściu z zakresu, gdzie jest zalockowany przez tego
    guarda. Zastosowanie tego samego narzedzia do deskryptora, gdzie
    takich wymagań nie ma (nie masz sytuacji, gdzie po zamknięciu
    deskruptora próbujesz go jeszcze raz otworzyć albo coś w tym stylu)
    jest suboptymalne - co prawda rozwiązuje ci bezpośrednio ten problem,
    ale umożliwia powstanie różnych błędów, które bez tego byłyby
    niemożliwe - choćby że w trakcie modyfikacji kodu ktoś zmodyfikuje
    zakresy tak, że deskryptor będzie zdefiniowany w innym niż jego lock,
    albo ktoś gdzies wstawi zamykanie tego deskryptora ręcznie.

    > > Dalej, jeśli np. próbujesz zrobić formatowane wyjście na deskryptor
    > > przez ręczne babranie się z alokowaniem buforów, kopiowaniem i
    > > sklejaniem stringów, jakimiś dodatkowymi funkcjami do formatowania
    > > liczb, to masz całą masę pomyłek, które łatwo popełnić z katastrofalnymi
    > > skutkami: dangling pointers, bufer overflow, memory leaks, czy dany
    > > string jest null-terminated czy nie itd. itp.
    >
    > Do formatowania do pliku, czy na stdout, rzeczywiście może być wygodniejsze
    > użycie FILE* lub iostream. Natomiast ich interfejs nie pasuje do sensownej
    > obsługi np. połączeń sieciowych, gdzie przed wywołaniem funkcji nie wiadomo
    > ile bajtów będzie się dało w tej chwili odczytać/zapisać. W takim wypadku
    > lepszy jest jawny podział na dwie części: formatowanie do pamięci, a
    > następnie przerzucenie w jednym lub wielu etapach przez deskryptor.

    streambuf ma buforowanie, więc tak to właśnie raczej powinno działać.
    Jednak musisz przyznać, że z punktu widzenia kogoś, kto chce
    sfotmatować komunikat i przesłać go po połączeniu albo z kolei
    odczytać komunikat zakończony np. CR-LF, niekoniecznie takie szczegóły
    implementacyjne są interesujące.

    > > Również dla sygnałów unixowych są abstrakcje, które będą zwykle
    > > sensowniejsze do stosowania niż systemowe API, na przykład w modelu
    > > programu, który obsługuje jakieś zdarzenia sygnał może wsytępować po
    > > prostu jako jeden z typów "zdarzeń".
    >
    > Można. Z tym że nie wiem, czemu miałoby to być "sensowniejsze". Jest tak
    > samo sensowne jak POSIX-owe, tylko z innym interfejsem.

    Sensowniejsze o tyle, że masz rodzieloną logikę mówiącą jak na jakieś
    zdarzenie trzeba reagować z samą obsługą i rozstrzyganiem tego, na co
    jak trzeba zareagować. W związku z tym komuś dodającemu nowy typ
    zdarzenia do obsługi trudniej będzie zepsuć jakiś aspekt istniejącej
    logiki, niż jeśli modyfikuje dużą pętlę z 'jeśli sygnał to tamto,
    jeśli coś na sockecie to śmamto, jeśli minęło tyle czasu to owamto".

    > > Kolejne unixowe API którego łatwo przez pomyłkę użyć nieprawidłowo i
    > > rozwalić program to choćby pthreads.
    >
    > Wątków akurat unikam jak mogę. Łatwiej się testuje dwa współpracujące
    > procesy, niż dwa współpracujące wątki. API opakowujące pthreads nie
    > wniosłoby mi w tej kwestii absolutnie nic.

    W rzeczywistości wątków się używa bo to wydajny i elastyczny sposób na
    zrównoleglenie aplikacji. W przypadku stosowania oddzielnych procesów
    samo kszta związane z narzutem na ich odpalanie, IPC itd. często
    zabijają wszelkie korzyści ze zrównoleglenia.

    > >> Oczywiście w każdym API dałoby się wskazać jakieś wady, ale na jakiej
    > >> podstawie miałbym przypuszczać, że zrobiona w dużo krótszym czasie
    > >> abstrakcja będzie istotnie lepsza?
    >
    > > Dlaczego zakładasz, że w dużo krótszym czasie?
    >
    > Porównuję do czasu od którego istnieją systemy Uniksowe. Większość założeń
    > jest już bardzo starych, ale jednak przez bardzo wiele lat standard się
    > jeszcze rozwija.

    Owszem, standard się rozwija, ale zachowanie wsteczniej
    kompatybilności z latami 70-tymi jest ważniejsze niż tworzenie
    lepszych abstrakcji. Raczej bym powiedział, że rozwój koncentruje się
    na dostarczaniu nowej funkcjonalności, słusznie zakładając, że
    potrzeba abstrakcji będzie zaspokojona przez biblioteki opakowujące.
    Już nie mówiąc o tym, że API jest w C, a to język dosyć kiepsko
    nadający sie do wyrażania abstrakcji czy budowania struktur
    wspierających niezawodność.

    > > Nie znam Qt, więc się nie wypowiem. Zapewne ewidentną zaletą tago
    > > rozwiązania jest to, że nie da się pomylić inta zawierającego deskryptor
    > > z intem zawierający liczbę przeczytanych bajtów.
    >
    > Nie widziałem jeszcze przypadku pomylenia inta zawierającego deskryptor z
    > intem zawierającym liczbę przeczytanych bajtów. Ta zaleta jest czysto
    > teoretyczna.

    Ja widziałem wiele przypadków błedów spowodowanych pomyleniem x-a
    robiącego A z x-em robiącym B przez kogoś, kto nigdy przedtem nie
    widział takiego przypadku. Mnie też to oczywiście wiele razy
    dotyczyło.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: