Autor Wątek: [C++] Wyjatki - uzytecznosc.  (Przeczytany 4331 razy)

Offline Bloodian

  • Użytkownik

# Kwiecień 08, 2012, 20:50:38
Rozmawialem z kolega ktory juz troche programuje "profesjonalnie", cokolwiek to znaczy.
Uslyszalem od niego ze programisci nie uzywaja systemu wyjatkow w c++. Czy to prawda ?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline asmen

  • Użytkownik

# Kwiecień 08, 2012, 20:58:37
Ja nie używam. Na którymś igk ktoś o tym mówił. Z tego co pamiętam: "[...]system wyjątków powinien być wyłączony."

Offline Charibo

  • Redaktor

# Kwiecień 08, 2012, 21:22:48
To mniej-więcej taka sama generalizacja jak to, że prostytutki nie całują w usta albo polacy kradną. Część całuje, część kradnie, a część nie. Jeśli zysk z używania wyjątków przewyższa ich wady to się używa, w przeciwnym wypadku się z nich rezygnuje :)

IMO wyjątki są wygodne i używam ich, a drobny spadek wydajności mnie nie boli :)

Offline Xion

  • Redaktor
    • xion.log

# Kwiecień 08, 2012, 22:34:47
Cytuj
To mniej-więcej taka sama generalizacja jak to, że prostytutki nie całują w usta albo polacy kradną. Część całuje, część kradnie, a część nie.
Nie śmiem podważać opinii specjalisty ;-)

A co do wyjątków, to najczęściej wskazywany problem z nimi polega na tym iż powodują one stały i nieunikniony narzut wydajnościowy, niezależnie od tego czy wyjątek rzeczywiście wystąpi czy nie. (Przynajmniej w MSC i GCC; o ile pamiętam w LLVM można skorzystać z zero-cost exceptions). Ponieważ jest to narzut na każdą ramkę stosu, jedynym sposobem na pozbycie się go jest rzeczywiście całkowite wyłączenie wyjątków. Oczywiście można to uznać za przedwczesną optymalizację, tyle że jeśli po napisaniu całej gry nagle okaże się że wyjątki są wąskim gardłem, przerabianie całego systemu obsługi błędów przyjemne nie będzie; więc lepiej ubezpieczać się zawczasu.

Oczywiście można do tego dorabiać jakieś racjonalizacje w rodzaju: wyjątki są be bo źle współpracują z alokacją/zwalnianiem zasobów; przenoszą punkt wykonania w "niespodziewane" miejsce; są bardziej skomplikowane niż flagi błędów, itp. Pod spodem chodzi jednak tylko o wydajność.

Offline Kos

  • Użytkownik
    • kos.gd

# Kwiecień 08, 2012, 23:09:52
Oczywiście można to uznać za przedwczesną optymalizację, tyle że jeśli po napisaniu całej gry nagle okaże się że wyjątki są wąskim gardłem

Z okazji Wielkanocy życzę wszystkim forumowiczom, by ich gry były tak kozacko wydajne, by wyjątki miały szanse stać się wąskim gardłem :-).

Offline bies

  • Użytkownik

# Kwiecień 08, 2012, 23:49:54
A co do wyjątków, to najczęściej wskazywany problem z nimi polega na tym iż powodują one stały i nieunikniony narzut wydajnościowy, niezależnie od tego czy wyjątek rzeczywiście wystąpi czy nie. (Przynajmniej w MSC i GCC; o ile pamiętam w LLVM można skorzystać z zero-cost exceptions). Ponieważ jest to narzut na każdą ramkę stosu, jedynym sposobem na pozbycie się go jest rzeczywiście całkowite wyłączenie wyjątków.
W gcc też są zero-cost exceptions. Nazwane tam dwarf2 exceptions. Jest też stary model: sjlj exceptions. Nie wiem co masz na myśli pisząc ,,narzut na ramkę stosu'' więc polecam: http://gcc.gnu.org/ml/java/2001-12/msg00222.html -- tam jest krótki opis tego jak oba modele są zrealizowane.

Offline dampe

  • Użytkownik

# Kwiecień 09, 2012, 00:31:21
To wszystko zależy do czego stosujesz wyjątki - czasami ich używanie jest jak strzelanie z armaty do komara, a czasami jest to idealne rozwiązanie.
Ja tam lubię korzystać z wyjątków, tak samo jak z asercji i innych metod obsługi błędów. Wydaje mi się że auto-ban na korzystanie z wyjątków jest śmieszny i nieracjonalny :)

Offline deadeye

  • Użytkownik

# Kwiecień 09, 2012, 02:22:49
Wyjątki powodują bardzo duże ryzyko leaków, które nawet nie będą widoczne dla czytającego kod.

Offline Xirdus

  • Moderator

# Kwiecień 09, 2012, 03:09:27
Wyjątki powodują bardzo duże ryzyko leaków, które nawet nie będą widoczne dla czytającego kod.
RAII

Offline Xion

  • Redaktor
    • xion.log

# Kwiecień 09, 2012, 09:35:55
Z okazji Wielkanocy życzę wszystkim forumowiczom, by ich gry były tak kozacko wydajne, by wyjątki miały szanse stać się wąskim gardłem :-).
Skoro funkcje wirtualne mogły się takowym stać, to wyjątki też potrafię sobie wyobrazić w tej roli ;)

bies: Chodziło mi o każdy blok try; drobne przejęzyczenie.

Offline Xender

  • Użytkownik

  • +1
# Kwiecień 09, 2012, 11:04:18
Ja mogę sobie wyobrazić problem z vcallami albo wyjątkami tylko keśli ktoś wpycha je wszędzie. A straszenie początkujących domniemaną powolnością tych mechanizmów prowadzi np. do nieświadomej ich reimplementacji.

Offline deadeye

  • Użytkownik

# Kwiecień 09, 2012, 20:20:46
RAII
RAII wszystkich problemów z alokacją nie rozwiązuje, szczególnie jeśli alokujesz dynamicznie obiekty tymczasowe.

Offline ShadowDancer

  • Moderator

# Kwiecień 09, 2012, 20:24:40
@up: auto ptr z std?

Offline kapec94

  • Użytkownik

# Kwiecień 09, 2012, 21:22:59
Ale o JAK DUŻYM narzucie wydajnościowym w ogóle mówimy? Wywołanie dodatkowej funkcji/parę dodatkowych instrukcji dla procesora raczej nie jest problemem, który powinien spędzać sen z powiek programistom, dopóki nie piszą aplikacji, w której liczy się każdy cykl procesora.

Offline yarpen

  • Użytkownik

# Kwiecień 09, 2012, 21:33:05
Jak np. gry?