mark florisson <markflorisso...@gmail.com> wrote:

>On 5 July 2012 21:46, Dag Sverre Seljebotn <d.s.seljeb...@astro.uio.no>
>wrote:
>>
>>
>> mark florisson <markflorisso...@gmail.com> wrote:
>>
>>>On 3 July 2012 20:15, Robert Bradshaw <rober...@gmail.com> wrote:
>>>> On Tue, Jul 3, 2012 at 11:43 AM, Dag Sverre Seljebotn
>>>> <d.s.seljeb...@astro.uio.no> wrote:
>>>>> On 07/03/2012 08:23 PM, Robert Bradshaw wrote:
>>>>>>
>>>>>> On Tue, Jul 3, 2012 at 11:11 AM, Stefan
>Behnel<stefan...@behnel.de>
>>>>>> wrote:
>>>>>>>
>>>>>>> Robert Bradshaw, 03.07.2012 19:58:
>>>>>>>>
>>>>>>>> On Tue, Jul 3, 2012 at 9:38 AM, Stefan Behnel wrote:
>>>>>>>>>
>>>>>>>>> Dag Sverre Seljebotn, 03.07.2012 18:11:
>>>>>>>>>>
>>>>>>>>>> On 07/03/2012 09:14 AM, Stefan Behnel wrote:
>>>>>>>>>>>
>>>>>>>>>>> I don't know what happens if a C++ exception is not being
>>>caught, but
>>>>>>>>>>> I
>>>>>>>>>>> guess it would simply crash the application. That's a bit
>more
>>>>>>>>>>> visible than
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Yep.
>>>>>>>>>>
>>>>>>>>>>> just printing a warning when a Python exception is being
>>>ignored due
>>>>>>>>>>> to a
>>>>>>>>>>> missing declaration. It's really unfortunate that our
>>>documentation
>>>>>>>>>>> didn't
>>>>>>>>>>> even mention the need for this, because it's not immediately
>>>obvious
>>>>>>>>>>> that
>>>>>>>>>>> Cython won't handle errors in "new", and testing for memory
>>>errors
>>>>>>>>>>> isn't
>>>>>>>>>>> quite what people commonly do in their test suites.
>>>>>>>>>>>
>>>>>>>>>>> Apart from that, I agree, users have to take care to
>properly
>>>declare
>>>>>>>>>>> the
>>>>>>>>>>> API they are using.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Is there any time you do NOT want a "catch (...) {}" block? I
>>>can't
>>>>>>>>>> see a
>>>>>>>>>> C++ exception propagating to Python-land doing anything
>useful
>>>ever.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> That would have been my intuition, too.
>>>>>>>>
>>>>>>>>
>>>>>>>> If it's actually embedded, with the main driver in C++, one
>might
>>>want
>>>>>>>> it to propagate up.
>>>>>>>
>>>>>>>
>>>>>>> But what kind of a propagation would that be? On the way out, it
>>>could
>>>>>>> induce anything, from side effects to resource leaks to crashes,
>>>>>>> depending
>>>>>>> on what the state of the surrounding code is. It would leave the
>>>whole
>>>>>>> system in an unpredictable state. I cannot imagine anyone really
>>>wanting
>>>>>>> this.
>>>>>>>
>>>>>>>
>>>>>>>>>> So shouldn't we just make --cplus turn *all* external
>functions
>>>and
>>>>>>>>>> methods
>>>>>>>>>> (whether C-like or C++-like) into "except +"? (Or keep
>except+
>>>for
>>>>>>>>>> manual
>>>>>>>>>> translation, but always have a catch(...)".
>>>>>>>>>>
>>>>>>>>>> Performance overhead is the only reason I can think of to not
>>>do this,
>>>>>>>>>> although IIRC C++ catch blocks are only dealt with during
>stack
>>>>>>>>>> unwinds and
>>>>>>>>>> doesn't cost anything/much (?) when they're not triggered.
>>>>>>>>>>
>>>>>>>>>> "except -1" should then actually mean both; "except + except
>>>-1". So
>>>>>>>>>> it's
>>>>>>>>>> more a question of just adding catch(...) *everywhere*, than
>>>making
>>>>>>>>>> "except
>>>>>>>>>> +" the default.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> I have no idea if there is a performance impact, but if there
>>>isn't,
>>>>>>>>> always
>>>>>>>>> catching all exceptions sounds like a reasonable thing to do.
>>>After
>>>>>>>>> all, we
>>>>>>>>> have no support for catching C++ exceptions on user side.
>>>>>>>>
>>>>>>>>
>>>>>>>> This is a bit like following every C call with "except *"
>(though
>>>the
>>>>>>>> performance ratios are unclear). It just seems a lot to wrap
>>>every
>>>>>>>> single line of a non-trivial C++ using function with try..catch
>>>>>>>> blocks.
>>>>>
>>>>>
>>>>> It seems "a lot" of just what exactly? Generated code? Binary
>size?
>>>Time
>>>>> spent in GCC parser?
>>>>
>>>> All of the above. And we should take a look at the runtime overhead
>>>> (which is hopefully nil, but who knows.)
>>>>
>>>>> Though I guess one might want to try to pull out the try-catch to
>at
>>>least
>>>>> only one per code line rather than one per SimpleCallNode.
>>>>
>>>> Or even higher, if possible. It's still a lot.
>>>
>>>Why would you have to do that? Can't you just insert a try/catch per
>>>try/except or try/finally block, or if absent, the function body.
>That
>>>will still work with the way temporaries are cleaned up. (It should
>>>also be implemented for parallel/prange sections).
>>
>> One disadvantage is that you don't get source code line for the .pyx
>file in the stack trace. Which is often exactly the information you are
>looking for (even worse, since C++ stack isn't in the stack trace, the
>lineno for what seems like the ' ultimate cause' is not there). Having
>to surround statements with try/except just to pinpoint which one is
>raising the exception would be incredibly irritating.
>>
>> Dag
>
>Oh yeah, good point. Maybe we could use these zero-cost exceptions for
>cdef functions in Cython though, instead of error checks (if it
>appears to make any significant difference). Basically instead of the
>'error' argument in CEP 526. It'd need version that ABI as well...
>

Wait, one can just do

lineno = 25;
a()
linono = 27;
b()

And wrap the block with a try catch.

I'm not sure if I like C++ exceptions internally in Cython myself. It would 
mean that C-compiled Cython modules would not be able to call C++-compiled 
Cython modules, which I think would create a lot of headache. And I think we 
want to keep the ability to compile with a C compiler if you don't call C++ 
code...

Dag

>>>
>>>>> "except *" only has a point when calling functions using the
>CPython
>>>API,
>>>>> but most external C functions are pure C, not
>>>CPython-API-using-functions.
>>>>> OTOH, all external C++ functions are C++ :-)
>>>>
>>>> Fair point.
>>>>
>>>>> (Also, if we wrote Cython from scratch now I'm pretty sure the
>>>"except *"
>>>>> defaults would be a tad different.)
>>>>
>>>> For sure.
>>>>
>>>>>>> But if users are correct about their declarations, we'd end up
>>>with the
>>>>>>> same thing. I think it's worth a try.
>>>>>>
>>>>>>
>>>>>> Most C++ code (that I've ever run into) doesn't use exceptions,
>>>>>> because exception handling is so broken in C++ anyways.
>>>>>
>>>>>
>>>>> Except for the fact that any code touching "new" could be raising
>>>>> exceptions? That propagates.
>>>>
>>>> I would guess most of the time people don't bother catching these
>and
>>>> let the program die, as there's often no sane recovery (the same as
>>>> MemoryErrors in Python, though I guess C++ is less often used from
>an
>>>> event loop).
>>>>
>>>>> There is a lot of C++ code out there using exceptions. I'd guess
>>>that both
>>>>> mathematical code and Google-written code is unlike most C++ code
>>>out there
>>>>> :-) Many C++ programmers go on and on about RAII and auto_ptrs and
>>>so on,
>>>>> and that doesn't have much point unless you throw an exception now
>>>and then
>>>>> (OK, there's the occasional return statement where it matters
>well).
>>>>
>>>> True, I've seen a small subset of the C++ code that's out there.
>>>Maybe
>>>> numerical computations use it a lot?
>>>>
>>>> +1 to making catch-everywhere a directive at least. Lets see what
>the
>>>> impact is before we decide to make it the default.
>>>>
>>>> - Robert
>>>> _______________________________________________
>>>> cython-devel mailing list
>>>> cython-devel@python.org
>>>> http://mail.python.org/mailman/listinfo/cython-devel
>>>_______________________________________________
>>>cython-devel mailing list
>>>cython-devel@python.org
>>>http://mail.python.org/mailman/listinfo/cython-devel
>>
>> --
>> Sent from my Android phone with K-9 Mail. Please excuse my brevity.
>> _______________________________________________
>> cython-devel mailing list
>> cython-devel@python.org
>> http://mail.python.org/mailman/listinfo/cython-devel
>_______________________________________________
>cython-devel mailing list
>cython-devel@python.org
>http://mail.python.org/mailman/listinfo/cython-devel

-- 
Sent from my Android phone with K-9 Mail. Please excuse my brevity.
_______________________________________________
cython-devel mailing list
cython-devel@python.org
http://mail.python.org/mailman/listinfo/cython-devel

Reply via email to