[Development] QList for Qt 6
marc at kdab.com
Thu May 16 15:05:37 CEST 2019
On 2018-11-02 08:51, Lars Knoll wrote:
> I believe I have a solution to get rid of QList without breaking SC in
> any major way. See https://codereview.qt-project.org/#/c/242199/ and
> the following changes.
> So to re-iterate: We will not break SC in major ways. The goal is to
> make porting from Qt 5.x to 6 as easy as possible.
It's technically SC alright, but silently breaking the reference
stability user code may rely on should be a complete no-no, considering
how reluctant Qt has been since the Qt 3->4 port with disruptive
changes. I welcome the openness to rethink the necessity of some of the
plumbing infrastructure, but it appears that you have come out far on
the other side on this one.
As I said a few years ago, QList in Qt 5 should have a warning if it
keeps reference stability (iow: if it's not already behaviour- if not
structure-compatible with QVector), indicting very strongly that by Qt
6, this use-case will be gone. Then port all of Qt's own code away from
QList, either to QVector, or, say, std::vector<std::unique_ptr>, like in
QToolBox (https://codereview.qt-project.org/261943), which is a case
where a user that actually relies on the implicit reference-stability
guarantee of current QList, then deprecate QList.
Back then I suggested to rename QList to QArrayList and have QList be a
deprecated template alias for _either_ QArrayList or QVector, depending
on whether Q5List would keep references stable or not.
Please don't make QList an unconditional alias for QVector. You are
silently breaking Qt code (cf. QToolBox) along with an unknown amount of
Qt-user's code. Make the break non-silent.
I understand the desire to keep old code working that was written
against Qt 5. But to me, the better solution would be to have the Qt 6
API explicitly return QVector and have implicit, but deprecated,
conversions between QList and QVector. The priority should be to not
break code. It should not be a priority to have unported code enjoy
optimal speed. An actual copy on implicit QVector -> QList conversion is
acceptable, IMO, since the solution for codebases targeting both Qt 5
and 6 is simple: use an auto variable.
Going forward, we should be looking into removing more and more owning
containers from the interface and replace them with views. The standard
is working on a solution for the stale reference problem, and by the
time Qt 7 comes around, it will be hopefully widely available.
Thanks for considering,
More information about the Development