-
1. Data: 2009-12-06 22:35:55
Temat: sockety, czyli "suckage thereof"
Od: "Wiktor S." <w...@M...fm>
Pozwolę sobie ponarzekać sobie na sockety - na przykładzie winsock2, ale
dotyczy to też podobnych bibliotek w innych systemach.
Jest to jedno z gorszych API jakie widziałem.
Biblioteka stara się być do wszystkiego, od zabytków z lat chyba 60-tych po
Bluetooth. Przez to kod korzystający z biblioteki wygląda strasznie,
wszędzie zbędne wskaźniki - nawet do zwykłego inta, a jeszcze obok podajemy
jego rozmiar!
Zdaję sobie sprawę, że protokoły mają gdzieniegdzie wartości little endian,
ale można było to przed programistą ukryć, nie zmuszając do ręcznej
konwersji w niewiadomo którą stronę, niewiadomo w których miejscach. Mnóstwo
niespójności.
Wszędzie zbędne skróty, włączając w to potworki typu WSAEACCES (bo drugie S
na końcu byłoby już chyba za długie).
Internet raz nazywa się INET, gdzie indziej In, a jeszcze gdzie indziej IP.
Wiele pól w strukturach ma nie wiedzieć po co dziwaczne nadmiarowe
przedrostki (np. S_un_w).
Pary stałych np. WSAECANCELLED i WSA_E_CANCELLED o różnych wartościach.
Do wyboru sockety blokujące (czekające do wieczności bez możliwości
anulowania operacji), nieblokujące (przepraszające nas że istnieją) i
asynchroniczne, podczas gdy wygodniejsze byłoby coś pomiędzy pierwszymi
dwoma.
Funkcje o mało wyszukanych nazwach accept, select czy connect. Tutaj też
niespójność aż niewiarygodna: gethostbyname ale GetNameByType.
I ten cały bajzel w imię czego? Zgodności z jakimś unikso-posiksem sprzed 30
lat? Po co?
--
Azarien
-
2. Data: 2009-12-18 14:41:30
Temat: Re: sockety, czyli "suckage thereof"
Od: Michał 'Khorne' Rzechonek <k...@g...com>
On 6 Gru, 23:35, "Wiktor S." <w...@M...fm> wrote:
> I ten cały bajzel w imię czego? Zgodności z jakimś unikso-posiksem sprzed 30
> lat? Po co?
Po to, żeby nie trzeba było od nowa pisać całego Internetu.
API gniazd w POSIXie jest całkiem naturalne po chwili praktyki. Musisz
pamiętać, że jest to interfejs C, a nie Java/Python/Ruby, i odwołuje
się w
zasadzie bezpośrednio do OSa (praktycznie wszystkie operacje na
gniazdach
to owinięte wywołania systemowe). Z tej perspektywy interfejs jest
całkiem
niezły.
Twoje narzekanie natomiast dotyczy głównie WinAPI. Tego API komentować
nie będę, bo gniazda nie są jedynym miejscem w którym "z lekka
odstaje".
Jeśli natomiast chcesz czegoś wysokopoziomowego, to użyj jednego
z pierdyliarda zrębów do programowania sieci, od boost::asio do
withSocketsDo.
pozdro
--
Michał 'Khorne' Rzechonek