Odpověď na názor

Odpovídáte na názor ke článku SEH v Linuxu (C++).

  • 6. 9. 2012 15:37

    Ondřej Novák (neregistrovaný)

    Neznám implementační detaily konkretného GCCčka. Ve světě linuxu není jen GCC. Vyskakování ze signálů pomocí (sig)longjmp je přitom posixově portabilní. Teoreticky by to tedy mělo fungovat všude, kde se používají posixové signály. Ale co když tam C++ výjimky implementují pouze jako alternativní cesta namísto jít returnem. Vždyť se to dá jednoduše. Stačí, když překladač bude výjimky implementovat tak, jako se bez výjimek ošetřují chyby. Něco jako "druhá návratová hodnota". Excepction handler pak není nic jiného, než nějaka extra větev ve funkci. Stack unwind se dá dělat staticky, protože všechny cesty z každého throw jsou dopředu známé. A potencionální bezpečí je právě v tom, že vyhození výjimky z neočekávaného místa nemusí vůbec fungovat, dokonce nemusí být vůbec možné!!!! V tomto směru vidím ještě velký vývoj. Rozhodně bych teď neřešil. Také to není účelem. Opravdu má představa byla spíš v tom, že to použiju při kopírování mapované paměti, test platnosti ukazatele, nebo práce s pamětí, která může kdykoliv během činnosti zmizet a jediný, na co si tam člověk musí dát pozor je, že nebude tam vytvářet objekty, které vyžadují destrukci při unwindu. To je celé.