C++ a výjimka v destruktoru

Re:C++ a výjimka v destruktoru
« Odpověď #105 kdy: 07. 02. 2014, 09:53:22 »
Citace
Sorry ale navrhovat servery s tim, ze kdyz to spadne vyspawnujeme novyho workera neni hodne profesionalna.
Sorry, ale navrhovat server s tím, že crash jednoho threadu mi shodí celý server, není hodné profesionála.
Profesionální programátorovi program nespadne. Nikdy. Program by neměl padat. Na výjimečnou situaci se reaguje výjimkou


gamer

Re:C++ a výjimka v destruktoru
« Odpověď #106 kdy: 07. 02. 2014, 09:59:11 »
Profesionální programátorovi program nespadne. Nikdy. Program by neměl padat. Na výjimečnou situaci se reaguje výjimkou

Profesionální programátoři používají v serverech mimo svého kódu i generické komponenty, ve kterých jsou bohužel známé i neznámé bezpečnostní chyby. Se zapnutým binary hardening, což je na serveru dobrý nápad, vede pokus o exploit na crash.

Re:C++ a výjimka v destruktoru
« Odpověď #107 kdy: 07. 02. 2014, 10:47:04 »
Profesionální programátorovi program nespadne. Nikdy. Program by neměl padat. Na výjimečnou situaci se reaguje výjimkou

Profesionální programátoři používají v serverech mimo svého kódu i generické komponenty, ve kterých jsou bohužel známé i neznámé bezpečnostní chyby. Se zapnutým binary hardening, což je na serveru dobrý nápad, vede pokus o exploit na crash.

Pokud musi programátor používat i kód od amaterů, tak jistě máte pravdů, od toho mám SEH
(http://novacisko.blog.root.cz/2012/09/05/seh-v-linuxu-c/)

gamer

Re:C++ a výjimka v destruktoru
« Odpověď #108 kdy: 07. 02. 2014, 10:55:05 »
Pokud musi programátor používat i kód od amaterů, tak jistě máte pravdů, od toho mám SEH
(http://novacisko.blog.root.cz/2012/09/05/seh-v-linuxu-c/)
V tom případě si napište i vlastní kernel, protože v něm jsou bezpečnostní chyby taky.

Re:C++ a výjimka v destruktoru
« Odpověď #109 kdy: 07. 02. 2014, 11:48:12 »
Pokud musi programátor používat i kód od amaterů, tak jistě máte pravdů, od toho mám SEH
(http://novacisko.blog.root.cz/2012/09/05/seh-v-linuxu-c/)
V tom případě si napište i vlastní kernel, protože v něm jsou bezpečnostní chyby taky.
A teď o té červené karkulce.


Sten

Re:C++ a výjimka v destruktoru
« Odpověď #110 kdy: 07. 02. 2014, 12:10:11 »
Troluješ ty, SIGSEGV nebo 500 vyjde pro uživatele úplně nastejno a když na serveru spadne worker, vyspawnuje se místo něho nový, takže to postihne taky jednoho uživatele. Mimochodem cílem by nemělo být "nějak to zbastlíme a když občas někdo dostane 500, tak je to jedno, ve statistiká se to přece ztratí", ale "vytvoříme robustní řešení schopné definovaně ošetřit a reportovat chybové stavy (i více, ne jen první)".

Pak nechápu, proč u Apache vůbec řešili nějaké chybové stavy a vracejí 500, když by mohli jednoduše padat. Ono to možná bude tím, že workery např. používají sdílenou paměť, a pokud vám worker spadne na SIGSEGV, tak taky už nemusí nový worker naběhnout vůbec.

SIGSEGV není definované ošetřování a reportování chyb.

belzebub

Re:C++ a výjimka v destruktoru
« Odpověď #111 kdy: 07. 02. 2014, 12:15:29 »
Ja myslim ze byste si meli precist toto:

"Cleaner, more elegant, and harder to recognize"
http://blogs.msdn.com/b/oldnewthing/archive/2005/01/14/352949.aspx

krasne se tam ukazuje jak vyjimky poskytuji pouze ILUZI prehlednosti a jejich pouziti nemuzi byt vzdy prinosem.

A jinak k cele diskusi - pro me je to jen potvrzeni, ze C++ je jazyk, ktery si zaslouzi vyhynout a ze kdyz jsem pred 6 lety ve firme zamitl C++, ze jsem udelal dobre.

A dale ze "genialni programator", pan Novak, je solista, ktery nechape, ze existuji TEAMY, kde lide musi spolupracovat, prijimat nove lidi a zarucit vzajemnou zastupitelnost lidi.

Re:C++ a výjimka v destruktoru
« Odpověď #112 kdy: 07. 02. 2014, 12:23:23 »
Ja myslim ze byste si meli precist toto:

"Cleaner, more elegant, and harder to recognize"
http://blogs.msdn.com/b/oldnewthing/archive/2005/01/14/352949.aspx


Četl jsem. Předně "The Old New Thing" není žádná celebrita. Občas tam má zajímavé postřehy, občas tam má totální blbosti, jako v tomto případě. Nehledě na to, že ty příklady na špatné kódy má na konci v nějaké C#, v lepším případě.

Nemůžeš ignorovat vývoj.

Sten

Re:C++ a výjimka v destruktoru
« Odpověď #113 kdy: 07. 02. 2014, 12:26:00 »
Ja myslim ze byste si meli precist toto:

"Cleaner, more elegant, and harder to recognize"
http://blogs.msdn.com/b/oldnewthing/archive/2005/01/14/352949.aspx

krasne se tam ukazuje jak vyjimky poskytuji pouze ILUZI prehlednosti a jejich pouziti nemuzi byt vzdy prinosem.

Ten článek má tři zásadní chyby:
  • Špatně fungující kód s výjimkami je tam hodnocený jako „bad“, ale stejně špatně fungující kód bez výjimek je tam hodnocený jako „not-bad“
  • Ten „ukázkový“ problém s výjimkou bude úplně stejně chybný (a úplně stejně to neuvidíte), pokud jej přepíšete do error-code checking.
  • Yes, there are programming models like RAII and transactions, což je zcela zásadní věc při práci s výjimkami, je jen tak strčeno do závorky a odsunuto jako nepodstatné.

Re:C++ a výjimka v destruktoru
« Odpověď #114 kdy: 07. 02. 2014, 12:26:39 »
Ja myslim ze byste si meli precist toto:

"Cleaner, more elegant, and harder to recognize"
http://blogs.msdn.com/b/oldnewthing/archive/2005/01/14/352949.aspx

Citace: The Old New Thing
(Yes, there are programming models like RAII and transactions, but rarely do you see sample code that uses either.)

Tahle poznámka vypovídá o všem. Článek nedoporučuju.

gamer

Re:C++ a výjimka v destruktoru
« Odpověď #115 kdy: 07. 02. 2014, 12:33:17 »
A teď o té červené karkulce.

http://www.cvedetails.com/vulnerability-list/vendor_id-33/product_id-47/year-2013/Linux-Linux-Kernel.html
Podle Vaší logiky ten kernel od neschopných amatérských programátorů nemůžete používat a musíte si napsat vlastní, který bude samozřejmě bez chyb.

gamer

Re:C++ a výjimka v destruktoru
« Odpověď #116 kdy: 07. 02. 2014, 12:37:30 »
Pak nechápu, proč u Apache vůbec řešili nějaké chybové stavy a vracejí 500, když by mohli jednoduše padat. Ono to možná bude tím, že workery např. používají sdílenou paměť, a pokud vám worker spadne na SIGSEGV, tak taky už nemusí nový worker naběhnout vůbec.

SIGSEGV není definované ošetřování a reportování chyb.
Nikdo netvrdí, že SIGSEGV je nějaké ošetření chyby, já jen říkám, že když uživatel dostane 500 je to pro něj úplně stejné fatální selhání, jak když proces spadne na SIGSEGV a uživatel nedostane nic. Sdílenou pamět mezi workery není nutné používat (a je lepší obejít se bez sdílené paměti, protože komplexnost obsluhy sdílené paměti je dost vysoká).

Sten

Re:C++ a výjimka v destruktoru
« Odpověď #117 kdy: 07. 02. 2014, 12:43:05 »
Nikdo netvrdí, že SIGSEGV je nějaké ošetření chyby, já jen říkám, že když uživatel dostane 500 je to pro něj úplně stejné fatální selhání, jak když proces spadne na SIGSEGV a uživatel nedostane nic.

Pro toho konkrétního uživatele možná. Pro ty další, co používají daný worker, už ne.

Sdílenou pamět mezi workery není nutné používat (a je lepší obejít se bez sdílené paměti, protože komplexnost obsluhy sdílené paměti je dost vysoká).

Tak to řekněte Apachi. A nginxu. A lighttpd.

gamer

Re:C++ a výjimka v destruktoru
« Odpověď #118 kdy: 07. 02. 2014, 13:27:55 »
Pro toho konkrétního uživatele možná. Pro ty další, co používají daný worker, už ne.
Těch uživatelů je konečný počet menší nebo roven počtu threadů.

Tak to řekněte Apachi. A nginxu. A lighttpd.
Nic mě nenutí sdílenou pamět mezi workery používat, můžu to udělat, ale nemusím.

Mr. Obvious

Re:C++ a výjimka v destruktoru
« Odpověď #119 kdy: 07. 02. 2014, 14:47:38 »
Bez pochyby neni sporu o tom, ze vyjimky v destruktoru prinasi vic skody nez uzitku.

PS: Co takhle udelat nejake hlasovani? 1. otazka: Je to dobre? 2. otazka: chteli byste s takovym kodem pracovat?

Mno a na zaver ...

http://c2.com/cgi/wiki?BewareOfExceptionsInTheDestructor