-
Data: 2011-10-13 09:10:53
Temat: Re: Dlaczego w branży rozrywkowej najsłabiej płacą?
Od: Wojciech Jaczewski <w...@o...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Andrzej Jarzabek wrote:
>> Nie wiem jak jest z interfejsami windowsowymi, bo z nimi doświadczenie
>> miałem znikome, ale interfejsy POSIX-owe są bardzo dobre. Abstrakcja w
>> postaci deskryptora pliku - coś wspaniałego.
>
> Właśnie kaszanka. Przykładowo, jeśli mówimy o niezawodności, to sam
> fakt, że deskryptor jest typem liczbowym ułatwia popełnienie błędu
> polegającego na tym, że jako deskryptora używasz liczby, która
> deskryptorem nie jest.
Teoretycznie możliwe, w praktyce jeszcze tego nie widziałem.
> 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.
> 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.
>> Również dla krytykowanych przez niektórych uniksowych sygnałów daje się
>> czasem znaleźć fajne zastosowanie, gdzie bez sygnałów program byłby dużo
>> bardziej zawiły.
>
> 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.
> 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.
>> 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.
>> Dla mnie "opakowywanie systemowego API" to takie wynalazki jak np.
>> QSocket z Qt. Dla programów międzyplatformowych - może ma sens. Dla
>> programów na jedną platformę - żadnego.
>
> 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.
Następne wpisy z tego wątku
- 13.10.11 09:58 Wojciech Jaczewski
- 13.10.11 14:13 Andrzej Jarzabek
- 13.10.11 16:12 Andrzej Jarzabek
- 15.10.11 21:51 Wojciech Jaczewski
- 15.10.11 21:59 Wojciech Jaczewski
- 16.10.11 21:26 Andrzej Jarzabek
- 17.10.11 09:45 Wojciech Jaczewski
- 26.10.11 11:40 Sarr.
Najnowsze wątki z tej grupy
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-12-11 SEP 1 kV E
- 2024-12-11 DNS restrictions are on
- 2024-12-11 wielkie bu
- 2024-12-11 Białystok => Inżynier bezpieczeństwa aplikacji <=
- 2024-12-11 Aku LiPo źródło dostaw - ktoś poleci ?
- 2024-12-11 Warszawa => Specjalista Bezpieczeństwa Informacji <=
- 2024-12-11 Wrocław => Application Security Engineer <=
- 2024-12-11 Warszawa => Analyst in the Trade Development department (experience wi
- 2024-12-11 Lublin => Programista Delphi <=
- 2024-12-11 Motodziennik #305 Nowy ELEKTRYK za 350 złotych miesięcznie? Kreatywne kredytowanie problemów
- 2024-12-11 Warszawa => Spedytor Międzynarodowy <=
- 2024-12-11 Katowice => Key Account Manager (ERP) <=
- 2024-12-11 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2024-12-11 Idzie zima...czyli zaczynamy TETRIS :)
- 2024-12-11 Warszawa => Analityk w dziale Trade Development (doświadczenie z Powe