On 4 Jun 2010, at 12:18, Shuduo Sang wrote:
Does it mean the exception implementation of GNUstep is not
complete as well as Apple runtime?
There are two implementations of exception handling for use with
GNUstep. One is the old NeXT-style implementation, using setjmp()/
longjmp(), which is slow, unsafe, and needs to die a quick and
peaceful death. You may only use this with the NS_DURING family of
macros.
The other is DWARF zero-cost exception handling, which uses the
same mechanism as the newer GNU C++ ABI and as Apple's modern
runtime. This uses asynchronous unwinding tables and allows
cleanup in intervening stack frames irrespective of their
language. This ought to be the default, but I'm not sure if it is.
The catch is that you can not mix the two mechanisms, or you get
some problems. If you are using the @throw stuff, then you are
using the DWARF ABI, but if your GNUstep is using the setjmp()
mechanism then you may experience problems.
Note that there are several errors and serious omissions in the
explanation of the code in the page that you linked to - I haven't
read the code example in detail, but if it's written by someone
with the same little understanding of the EH mechanism as displayed
by the author of the page, then I wouldn't be surprised if it's buggy.
David
-- Sent from my brain
_______________________________________________
Discuss-gnustep mailing list
Discuss-gnustep@gnu.org
http://lists.gnu.org/mailman/listinfo/discuss-gnustep