Hi,

   (sorry for top posting)

    Small note, I believe that exception safety never really worked. It was 
almost not tested, so everyone depending on the feature was depending on an 
undefined behavior anyway.  At the beginning of Qt5 I tried to improve the 
situation in our containers. I wrote a few tests, I fixed a few bugs, but it 
was like going through a swamp, slow and dirty. Getting a review was difficult, 
because such changes were increasing code size, binary size, were complex and 
the worst almost nobody cared. The amount of bugs was scary. Even our the best 
container QVector was not working correctly with exceptions. So removing 
exception support is not a functionality regression it is just acknowledging of 
the current state. Now, maybe in some places it works, but from a API user 
perspective it is gambling. I do not think we are able to have exception safety 
"back", that requires a lot of commitment that I do not see.

  Personally, I used to like exceptions. It is sad that Qt is not supporting or 
really use them, but I believe that people can live without such support. 

  std::bad_alloc, is it even possible to see it, when at least on Linux most of 
distros have memory overcommit enabled?

Cheers,
  Jędrek
________________________________________
Od: development-bounces+jedrzej.nowacki=digia....@qt-project.org 
[development-bounces+jedrzej.nowacki=digia....@qt-project.org] w imieniu 
Olivier Goffart [oliv...@woboq.com]
Wysłano: 2 października 2013 09:09
Do: development@qt-project.org
Cc: Thiago Macieira
Temat: Re: [Development] Disabling exception support in QtCore?

On Tuesday 01 October 2013 23:32:00 Thiago Macieira wrote:
> On quarta-feira, 2 de outubro de 2013 05:42:24, Knoll Lars wrote:
> > On 01.10.13 23:23, "Thiago Macieira" <thiago.macie...@intel.com> wrote:
> > >On terça-feira, 1 de outubro de 2013 20:00:56, Knoll Lars wrote:
> > >> Yes, signal/slot connections between user code should IMO still be able
> > >> to pass through exceptions. I am afraid removing that will break code
> > >>that's out there.
> > >
> > >This is already forbidden since 5.0.
> >
> > Is there any good reason why we don't support this, as we did in Qt 4? My
> > goal of still compiling Qt Core with exceptions enabled was to allow for
> > exactly this use case.
>
> Because we don't test it, so there's no guarantee that it works. In fact,
> I'd be surprised if it works at all. What's more, our types aren't
> exception-safe, even the container types. It's entirely unknown what will
> happen during a stack unwind.
>
> Personally, I don't want to maintain that functionality.
>
> And then there's the question: is it worth the 7% increase in code size?

It is working. We even got bug report for some corner case where it did not,
and I fixed those. (so they are used)
There is no test because you did not want to have one. But we could easily add
more auto tests. (It is really not that difficult)
And it is "forbidden" only because you decided so, but it is not actually
forbidden.

I personally think letting exception go from the slot to the signal is a good
feature (for the DirectConnection case).
I am willing to maintain this functionality.

Of course it is not allowed to throw an exception with QueuedConnection, or if
the caller of the signal is not exception safe (all signals in Qt).
And if a signal is connected to several slots, further slots are not going to
be called.

The only stack frame it needs to crosses are QMetaObject::activate, the moc
generated code for signals or qt_metacall, and the templated helpers in
qobject(defs)_impl.h.  Could we perhaps only compile part of QtCore with
exception support?

Exceptions are not only about std::bad_alloc.
I think it is unfortunuate that we removed support for user thrown exceptions
from our container.  (I agree that supporting bad_alloc is useless).
But supporting throwing constructor and copy constructor in all the containers
is a bit harder than in signals and slots. (And also less usefull)

 --
Olivier

Woboq - Qt services and support - http://woboq.com - http://code.woboq.org

_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development
_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to