Yes, that is an issue.  Writing exception-safe code is hard, as I'm finding 
out...
Of course, I'll have to provide a way to turn off/on exceptions, both at 
compile time and at run time.

On Thursday, November 13, 2014 12:04:53 PM UTC-5, Robert Bradshaw wrote:
>
> Sage's wrapping of NTL should be just fine as long as it's declared in 
> the Cython declarations, but there's a question of all the libraries 
> that use NTL indirectly which may have more difficulty adapting to 
> exceptions being thrown though their call stacks. 
>
> On Tue, Nov 11, 2014 at 3:48 PM, Francesco Biscani <blues...@gmail.com 
> <javascript:>> wrote: 
> > OOM exception handling is gonna be hard to implement, as GMP does not 
> > provide any mechanism to recover from memory errors. You can replace the 
> GMP 
> > memory management functions but the usual problem with that approach is 
> that 
> > you might be potentially interacting with other packages which might 
> also 
> > want to override the default functions. Another problem is that IIRC 
> > throwing C++ exceptions from C is undefined (or maybe 
> > implementation-defined?) behaviour. 
> > 
> > In any case, exceptions are the way to go when you program in C++. A 
> > well-coded C++ program should state precisely what level of exception 
> safety 
> > the routines provide (no-throw, strong, basic), and how and what a 
> routine 
> > can throw. Ideally you would want strong exception safety always - this 
> is 
> > quite doable but sometimes for the sake of performance basic exception 
> > safety is a good compromise. Of course anything involving move semantics 
> > should be marked noexcept. Another typical suggestion is always to use 
> RAII 
> > patterns when coding routines that can throw - that way you are 
> guaranteed 
> > that any resource is properly cleaned up before exiting the function 
> through 
> > an exception. 
> > 
> > C++11 also has good support for handling exceptions in threads, 
> including 
> > transporting exceptions between threads. In particular, using an 
> std::future 
> > for managing the return value of (or the exception thrown within) a 
> thread 
> > is pretty handy. 
> > 
> > Cheers, 
> > 
> >   Francesco. 
> > 
> > On 12 November 2014 00:05, Jean-Pierre Flori <jpf...@gmail.com 
> <javascript:>> wrote: 
> >> 
> >> 
> >> 
> >> On Tuesday, November 11, 2014 11:55:49 PM UTC+1, Volker Braun wrote: 
> >>> 
> >>> What kind of error states are we talking about? divide by zero and out 
> of 
> >>> memory? 
> >>> 
> >> Exactly, that is exactly the kind of stuff Victor mentioned. 
> >> 
> >>> 
> >>> IMHO a C++ library should just throw C++ exceptions, thats what they 
> are 
> >>> here for. If only for better readability -> less bugs. If you declare 
> >>> methods with "except +" to Cython then they will automatically be 
> converted 
> >>> into Python exceptions, so its also very convenient for us. Pynac uses 
> that 
> >>> all the time. 
> >>> 
> >>> Pretty much the only potential downside are rumors that exceptions 
> might 
> >>> possibly hinder the optimizer. Though I've never seen that in a 
> reasonable 
> >>> benchmark. While that is certainly a possibility, it would just be an 
> >>> optimizer bug. All reasonable C++ compilers uses a zero-cost model so 
> its at 
> >>> least as fast as handling / returning some error flag. What _is_ 
> expensive 
> >>> is when an exception occurs, but in C++ you are not supposed to use 
> >>> exceptions for program flow like in Python. 
> >>> 
> >>> 
> >>> 
> >>> On Tuesday, November 11, 2014 10:15:44 PM UTC, Jean-Pierre Flori 
> wrote: 
> >>>> 
> >>>> Dear all, 
> >>>> 
> >>>> As you must have noticed, Victor Shoup just released a new thread 
> safe 
> >>>> version of NTL. 
> >>>> 
> >>>> He also took the opportunity to ask me (and surely a bunch of other 
> >>>> people) what would be expected from exception handling in NTL 
> >>>> Currently NTL just prints something and then aborts. 
> >>>> Note that we patch that in Sage to call one of our own functions and 
> >>>> avoid aborting. 
> >>>> I'm no C++ expert and don't usually play with exceptions, so I don't 
> >>>> have anything that sart to say. 
> >>>> But your comments/ideas/suggestions are more than welcomed. 
> >>>> I can gather them and forward them back to Victor. 
> >>>> 
> >>>> Best, 
> >>>> JP 
> >> 
> >> -- 
> >> You received this message because you are subscribed to the Google 
> Groups 
> >> "sage-devel" group. 
> >> To unsubscribe from this group and stop receiving emails from it, send 
> an 
> >> email to sage-devel+...@googlegroups.com <javascript:>. 
> >> To post to this group, send email to sage-...@googlegroups.com 
> <javascript:>. 
> >> Visit this group at http://groups.google.com/group/sage-devel. 
> >> For more options, visit https://groups.google.com/d/optout. 
> > 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> Groups 
> > "sage-devel" group. 
> > To unsubscribe from this group and stop receiving emails from it, send 
> an 
> > email to sage-devel+...@googlegroups.com <javascript:>. 
> > To post to this group, send email to sage-...@googlegroups.com 
> <javascript:>. 
> > Visit this group at http://groups.google.com/group/sage-devel. 
> > For more options, visit https://groups.google.com/d/optout. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to