> On 24 May 2019, at 10:19, Mutz, Marc via Development 
> <development@qt-project.org> wrote:
> 
> On 2019-05-24 09:35, Lars Knoll wrote:
>>> On 23 May 2019, at 13:26, Mutz, Marc via Development 
>>> <development@qt-project.org> wrote:
> [...]
>>> You said that QList should vanish from Qt API. So we don't care. We'll have 
>>> that switch to make QList _be_ QVector for ese of porting, but as a 
>>> template alias. There's your zero-copy conversion :) That leaves users. And 
>>> I repeat: I'd leave QList alone (as QArrayList, possibly with always 
>>> IndirectLayout), and just have implicit deprecated conversions between 
>>> QArrayList and QVector. You shouldn't care about performance of unported 
>>> code: It's easy to target both Qt 5 and Qt 6 if you use auto for receiving 
>>> from Qt API. For sending to Qt API, it's a bit more tricky. You need to 
>>> ifdef or live with the implicit conversion in a Qt 6 build, but it's not 
>>> something that we should optimize for. Really. Don’t.
>> Sorry, but no. Larger performance regressions that are not really
>> visible/cought at compile time can be as large a headache to our users
>> as the non stable references to data in the container.
> 
> Sorry, you're comparing apples and oranges, iow: a performance issue with a 
> correctness issue. You cannot weigh them against each other. We need to 
> ensure that user code stays correct _first_, fast _second_. The first rule of 
> optimisation: Don't do it. The second rule: Don't do it _yet_. Write correct 
> code first, optimize later. You can't turn that around. It'd send a 
> catastrophic signal to Qt users.

Yes, both are different things. But for a user moving from Qt 5 to Qt 6, it 
mainly matters how he is affected by this. 

And there might be quite a few people who will never hit the problem with 
stability of references (because storing a reference to a member of the list is 
not that common), but they will be seeing performance issues because of the 
implicit (and hidden) conversion.

> 
> Here's how I see it: performance problems show up in testing, and are easily 
> identified by a profiler, a tool that is available on every platform and 
> everyone knows how to use it. Stability of references problems are found, if 
> at all, by memory sanitizers, something that much less people will be 
> familiar with, and, crucially, might hide in less-well tested code.
> 
>> I’d argue that it might cause the larger amount of problems as keeping
>> references to data in the container is something that’s not used very
>> often. But *everybody* will have tons of conversions between QList and
>> QVector with your plan for unported code. IMO that’s just as bad.
> 
> I disagree. See above. I'd like to add, if I may be so bold, that seeing just 
> how widespread unintended detaches are _even in Qt code_, are you _actually_ 
> going to tell me that copying a QVector into a QList is going to be 
> _noticeable_? It has O(detach) complexity. Yes, in the 5% of code, it might 
> get slower (if there wasn't an unintended detach to begin with), but as I 
> said: it's easily identified with the simplest of tools: a profiler, and in 
> normal testing. The correctness issue may be hiding in the 95% that is less 
> well maintained.

Profilers help with real hot spots. They don’t really help a lot if those 
things are spread all over your code base.
> 
> Please tell me that I misunderstood you and that you are _not_ going to 
> prefer to optimize for speed of _unported_ code, sacrificing correctness of 
> the same?

You conveniently didn’t quote the first part of my answer. I didn’t say that. I 
said I really want to ensure that we get a zero copy conversion between QList 
and QVector where this doesn’t imply (possible) incorrectness in the code. 
That’s the case for all types that are smaller than a pointer and movable.

Lars

> 
> Please?
> 
> Thanks,
> Marc
> 
> _______________________________________________
> Development mailing list
> Development@qt-project.org
> https://lists.qt-project.org/listinfo/development

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

Reply via email to