-
Data: 2011-10-13 00:31:21
Temat: Re: Dlaczego w branży rozrywkowej najsłabiej płacą?
Od: Andrzej Jarzabek <a...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On 12/10/2011 23:51, Wojciech Jaczewski wrote:
> Andrzej Jarzabek wrote:
>>
>> Do pisania oprogramowania niezawodnego potrzebna jest abstrakcja i
>> czytelność kodu. Kod, który sobie po cichu zakłada, że int ma 32 bity ma
>> niedobory w jednym i drugim.
>
> Mowa o funkcjach systemowych, a nie zakładaniu ile bitów ma int. Trudno mi
> sobie wyobrazić, aby ktoś korzystał z tego założenia, mając do dyspozycji
> alternatywę w postaci int32_t.
Ja mówię o tym i o tym. A przykład z intem z życia wzięty: profesor to
właśnie napisał ledwie kilka dni temu.
> Bardzo jest dla mnie zagadkowe, że tak wiele osób uważa, iż interfejs
> opracowywany i testowany przez kilka dziesięcioleci koniecznie wymaga
> opakowania w jakąś abstrakcję, bo inaczej korzystać z niego nie należy...
Cała sztuka porządnego pisania większych programów polega na przejściu
między końcową funkcjonalnością a wykorzystywanymi bibliotekami przez
wiele warstw abstrakcji - i wyrażeniu tych abstrakcji w kodzie.
> 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.
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.
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.
> 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ń".
Kolejne unixowe API którego łatwo przez pomyłkę użyć nieprawidłowo i
rozwalić program to choćby pthreads.
> 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? Jeśli mówimy o
generycznych abstrakcjach na system operacyjny, to jak pisałem są to
albo istniejące i szeroko stosowane biblioteki third party, albo też
rozwiązanie in house stosowane w wielu produktach danej firmy i często
rozwijane latami.
> 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.
> Interfejs udostępniany przez system (POSIX) jest
> lepszy. Testowałem też kiedyś Boost::Asio - nieczytelny w porównaniu z tym,
> co można zrobić korzystająć bezpośrednio z POSIX. I ciężki do integracji,
> jeśli program ma reagować jednocześnie na zdarzenia innego typu.
Nie mam doświadczenia z tym, ale pracowałem kiedyś z event handling
frameworkiem opakowującym unixowe API i praktyka jednak była taka, że
nowy typ zdarzeń był do niego dodawany dużo, dużo rzadziej niż pisanie
programów, które korzystały tylko z już obsługiwanych typów.
>> Pracowałem przy kilku większych projektach i normą było korzystanie z
>> biblioteki opakowującej API, chociaż nie takiej, która jest tworzona pod
>> konkretny projekt: albo były to biblioteki third party, albo robione w
>> firmie na potrzeby wielu projektów. To, czy korzystają czy nie
>> korzystają ze wszystkich funkcji API nie ma znaczenia - istotne jest, że
>> reprezentują wyższy poziom abstrakcji.
>
> Czy wyższy poziom abstrakcji w sensie np. baza danych zamiast bezpośredniego
> czytania z plików i synchronizowania przy pomocy fcntl/flock? czy tylko
> pozbierane kilka funkcji systemowych do kupy i pozamykane w obiekty?
Można mieć różne poziomy abstrakcji do różnych rzeczy. Dla pliku
chociażby możesz mieć poziom abstrakcji mówiący, że jest strumieniem, że
po zakończeniu działań na nim jest zamykany, na innym poziomie
abstrakcji możesz mieć wyrażony fakt, że jest fizycznym plikiem na
dysku, że np. program zapisuje określone dane do pliku o określonej
ścieżce, na wyższych poziomach masz semantykę: plik może być bazą
danych, logiem, dokumentem o zadanym formacie, plikiem konfiguracyjnym
itd. Brak odpowiedniego opakowania może choćby spowodować błąd
polegający na tym, że ktoś potraktuje plik XML z fiflakami jako plik
binarny zawierający bazę danych fiflaków lub odwrotnie.
Następne wpisy z tego wątku
- 13.10.11 00:39 Andrzej Jarzabek
- 13.10.11 09:10 Wojciech Jaczewski
- 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
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
- C++. Podróż Po Języku - komentarz
Najnowsze wątki
- 2025-07-14 granice
- 2025-07-14 Awaria VM?
- 2025-07-14 Gdańsk => Programista Kotlin <=
- 2025-07-14 Warszawa => Junior Rekruter <=
- 2025-07-14 Warszawa => Specjalista rekrutacji IT <=
- 2025-07-14 Wkłady do zniczy...
- 2025-07-14 Warszawa => Specjalista ds. Sprzętu Komputerowego <=
- 2025-07-14 Re: PO chroniło i chroni policyjnych bandziorów [zawiasy za katowanie obywatela (Poznań czerwiec 2012)]
- 2025-07-14 Warszawa => International Freight Forwarder <=
- 2025-07-14 Warszawa => Recruiter 360 <=
- 2025-07-14 Re: Rz?Âd ZAKAZUJE magazyn?Â?w energii ?!! Nowe prawo od 14 lipca to SZOK! ??Â
- 2025-07-14 Warszawa => Sales Assistant <=
- 2025-07-13 Fałszywe alerty
- 2025-07-12 dlaczego gadacie z tym debilem
- 2025-07-13 Unia Europejska przygotowuje nowy podatek