Maciej Sobczak
2020-04-04 19:10:24 UTC
Chyba w miarę upływu czasu zmieniają się oczekiwania użytkowników oraz mody wśród autorów bibliotek.
Pytanie: jakie macie oczekiwania wobec bibliotek? Mają rzucać wyjątki?
Różne języki mają różne konwencje, ale nawet jeden język potrafi mieć różne polityki w zależności od tego, jaki jest charakter wywoływanej funkcji.
Np. C++ rzuci wyjątkiem z operatora new, jeśli nie ma pamięci. Z tego powodu wyjątek poleci też z każdej innej funkcji biblioteki std, ale nie każde niepowodzenie jest tak zgłaszane. Np. błąd odczytu pliku albo błąd formatu danych w IOStreams już wyjątkiem nie będzie.
Czy to jest zgodne z oczekiwaniami? Czy te oczekiwania zależą od rodzaju biblioteki? Że np. akceptujemy wyjątek z biblioteki GUI, ale już z biblioteki I/O (jak IOStreams) lepiej mieć status? A może jest inaczej?
Spotkałem się też z opinią, że biblioteka nie powinna rzucać wyjątków, bo w ten sposób narzuca ten aspekt interfejsu aplikacji - ale już aplikacja końcowa może sobie korzystać z wyjątków (które sama sobie zdefiniuje, sama rzuci i sama złapie), bo nikomu innemu tego nie narzuca. Przyznam, że ten pogląd mnie zaintrygował najbardziej, chociaż nie widzę możliwości jego konsekwentnego zastosowania wszędzie (patrz choćby wspomniany operator new).
Są też języki, które używają wyjątków do zgłaszania wykroczeń poza ograniczenia systemu typów (do tego zaliczam przekroczenia zdefiniowanych zakresów, wyjazd poza tablicę, itp.). Nie widzę tego bez wyjątków. Ale powstaje też pytanie, na ile użycie nieistniejącego indeksu w tablicy jest podobnym zjawiskiem do np. próby skorzystania z nieistniejącego zasobu URL w sieci - i w jakim stopniu zgłaszanie takich błędów powinno być podobne.
Itp., itd., etc.
Jak to widzicie obecnie? W C++? Gdzie indziej?
Pytanie: jakie macie oczekiwania wobec bibliotek? Mają rzucać wyjątki?
Różne języki mają różne konwencje, ale nawet jeden język potrafi mieć różne polityki w zależności od tego, jaki jest charakter wywoływanej funkcji.
Np. C++ rzuci wyjątkiem z operatora new, jeśli nie ma pamięci. Z tego powodu wyjątek poleci też z każdej innej funkcji biblioteki std, ale nie każde niepowodzenie jest tak zgłaszane. Np. błąd odczytu pliku albo błąd formatu danych w IOStreams już wyjątkiem nie będzie.
Czy to jest zgodne z oczekiwaniami? Czy te oczekiwania zależą od rodzaju biblioteki? Że np. akceptujemy wyjątek z biblioteki GUI, ale już z biblioteki I/O (jak IOStreams) lepiej mieć status? A może jest inaczej?
Spotkałem się też z opinią, że biblioteka nie powinna rzucać wyjątków, bo w ten sposób narzuca ten aspekt interfejsu aplikacji - ale już aplikacja końcowa może sobie korzystać z wyjątków (które sama sobie zdefiniuje, sama rzuci i sama złapie), bo nikomu innemu tego nie narzuca. Przyznam, że ten pogląd mnie zaintrygował najbardziej, chociaż nie widzę możliwości jego konsekwentnego zastosowania wszędzie (patrz choćby wspomniany operator new).
Są też języki, które używają wyjątków do zgłaszania wykroczeń poza ograniczenia systemu typów (do tego zaliczam przekroczenia zdefiniowanych zakresów, wyjazd poza tablicę, itp.). Nie widzę tego bez wyjątków. Ale powstaje też pytanie, na ile użycie nieistniejącego indeksu w tablicy jest podobnym zjawiskiem do np. próby skorzystania z nieistniejącego zasobu URL w sieci - i w jakim stopniu zgłaszanie takich błędów powinno być podobne.
Itp., itd., etc.
Jak to widzicie obecnie? W C++? Gdzie indziej?
--
Maciej Sobczak * http://www.inspirel.com
Maciej Sobczak * http://www.inspirel.com