[Development] How qAsConst and qExchange lead to qNN

Marc Mutz marc.mutz at qt.io
Mon Nov 14 21:53:19 CET 2022


On 14.11.22 18:11, Thiago Macieira wrote:
> On Monday, 14 November 2022 08:22:44 PST Marc Mutz via Development wrote:
>> Can we agree that NOI for setters is a no-brainer? Then 90% of the
>> usefulness of NOI can already be reaped, in a BC and SC manner. There's
>> pretty little we can do with return values before Qt 7, except use the
>> stuff in private APIs to try it out. But we can and should convert
>> setters already.
> 
> Not without conditions.
> 
> I can agree with that so long as it doesn't remove the ability to add the
> owning equivalent as overload, even if it is a Q_WEAK_OVERLOAD, where it
> benefits because the target code is going to store anyway.

_If_ and for as long as the class stores the data in _that_ owning 
container, fine by me. That'll probably be the case for Qt 6 going 
forward, because of those pesky owning container return types.

That said, I repeat that the goal here needs to be to let each class 
choose its own optimal data structure, and for a large class of cases 
that would be QVLA/llvm::SmallVector, iow: _something_ with a small 
buffer optimisation.

As long as we have an implicitly-shared everywhere policy, it's CoW on 
top of CoW on top of CoW. If the QRegionData/Private is ref-counted, 
then it makes little sense to contain the QRects in a container that's 
_also_ CoW. Nothing is using the implict sharedness of the QRect 
container (rects() is gone in 6.0, and can be re-used for a QSpan<const 
QRect> getter).

> I don't think we will ever change return types.

Your short interjections would be more valuable if you didn't just state 
an opinion, but also give rationale ;-)

Thanks,
Marc

-- 
Marc Mutz <marc.mutz at qt.io>
Principal Software Engineer

The Qt Company
Erich-Thilo-Str. 10 12489
Berlin, Germany
www.qt.io

Geschäftsführer: Mika Pälsi, Juha Varelius, Jouni Lintunen
Sitz der Gesellschaft: Berlin,
Registergericht: Amtsgericht Charlottenburg,
HRB 144331 B



More information about the Development mailing list