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 <bluesca...@gmail.com> 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 <jpfl...@gmail.com> 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+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.
>
>
> --
> 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.

-- 
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