Lorenz Minder on Thu, 10 Sep 2009 08:59:14 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: TRY/CATCH is unnecessarily slow on OS X


Hi,

Bill Allombert wrote:
> > I went and checked the POSIX spec this afternoon.  These are the main
> 
> Was it the standard or the draft ? It would not be te only place they differ.

That was IEEE Std 1003.1-2008, which is not a draft unless I'm very
confused.  The standard is available on the web at

	http://www.opengroup.org/onlinepubs/9699919799/

Check the pages on _setjmp() and sigsetjmp().

> > 3) sigsetjmp(,0) does not have to store the signal mask, but it can.
> >    sigsetjmp(,1) must store it.
> > 
> > 4) They say new software should not use _setjmp, but rather sigsetjmp.
> > 
> > I think that given that sigsetjmp(,0) may store the signal mask, the
> > advice 4) seems dodgy.
> 
> What is worse, this is misleading: if you let out performance (which is 
> not a POSIX concern), then the issue is that siglongjmp can restore the
> signal mask even if one do not want to.

Exactly.

> err_catch only purpose is to implement the current stacked exceptions 
> system which I find wholly inedequate and hope to replace.
> 
> Furthermore, TRY/CATCH is not documented currently,

While this is correct, no other error handling mechanism was documented
either.  Yet, any nontrivial program needs to handle errors.

>and mostly here 
> to implement the gp trap() function, which has its load of problem.

I see.  Are the problems in trap() related to CATCH/TRY itself?

> Adding a call-back 'cb_pari_err_restore' seems a better solution.

I think that would be a workable solution, too.

I looked at the current patch that you propose in the bug report (the
number of which I forget).  There's an issue with this solution that
makes it currently still unsatisfactory for me:  An error message is
emitted to stdout before the handler is called.

I think it really should not do that, it's a library after all.  What if
I want to use stdout to write results of my calculation to?  What if an
error is in fact some outcome that I can handle perfectly well? (Think
of ECM, for example.)

Do you think it would be possible to write the error message to a string
instead and pass that to cb_pari_err_restore, which then can print it or
otherwise use it?

That would be a big improvement.

> > I was actually going to propose a small change that makes it possible
> > for users to avoid anything setjmp()/longjmp() based, provided they can
> > come up with a viable alternative.  The idea is as follows.
> 
> I think it would be better to provide the user with the mean to implement
> their own TRY/CATCH alternative, and keep the setjmp()/longjmp() one
> for internal libpari use.

When it comes to libpari 2.3.x, is there any ill-effect if an
application uses TRY/CATCH?  If so, what else should it use?

Best,
--Lorenz
-- 
Jetzt kostenlos herunterladen: Internet Explorer 8 und Mozilla Firefox 3 -
sicherer, schneller und einfacher! http://portal.gmx.net/de/go/atbrowser