[Development] QList for Qt 6
Mutz, Marc
marc at kdab.com
Mon May 20 16:39:49 CEST 2019
On 2019-05-20 15:52, Lars Knoll wrote:
> Hi Marc,
>
>> On 20 May 2019, at 14:39, Mutz, Marc via Development
>> <development at qt-project.org> wrote:
>>
>> Hi Lars,
>>
>> I'm on record for claiming QList needs to die, and I work for a
>> company that still makes part of its living by porting Qt 3 apps to
>> Qt 4 (and 5). So I should be celebrating if you create more
>> potential work for KDAB, but I'm actually ok with keeping QList.
>>
>> Provided it vanishes from each and every Qt API.
>>
>> Whether to call it Q5List or QArrayList or continue with QList
>> doesn't matter. Actually, I'd err on keeping QList, to minimize
>> porting. What I want to avoid is to break user code silently. Asan
>> is a runtime-checker, the code must actually be exercised, which is
>> trivial for QToolBox but might be problematic if it's in, say, error
>> handling code. And you rightfully pointed out that it's very hard
>> for a static checker to find cases where reference stability is
>> used. Not impossible, but hard.
>>
>> I want to understand what problems you see with keeping QList as-is
>> with deprecated implicit conversions to and from QVector, assuming
>> all Qt API that uses QList is ported to QVector.
>>
>> The way I see it:
>>
>> Given:
>> * QList stays as-is
>> * No Qt API takes or returns QList anymore, but QVector
>> * QList implicitly converts to QVector, and vice versa
>> * These implicit conversions are marked as deprecated
>>
>> Pros:
>> * Old (user) code doesn't silently change the meaning
>> * Old (user) code continues to work, lets users port at their own
>> leisure
>> * Receiving objects can be done with auto variables for optimal
>> performance
>> or with QList for old code.
>> * Users passing QLists into Qt APIs enjoy the implicit conversion to
>> QVector
>> + This might be slow, but you say yourself that speed doesn't
>> matter
>> for 95% of the code and it's easier to find and fix slow code in
>> the 5% than it is to find a silent reference stability breakage
>> in
>> the 95%.
>>
>> Cons:
>> * Unported code will get penalized by the implicit conversions from
>> and to QList
>> + But using the 95/5-argument here, again: it's easier to find
>> where the app
>> got slower in the 5% than to find a bug in the 95%.
>>
>> The pros far, far outweigh the cons. I'd very much like to know in
>> which aspects inheriting QList from QVector fares better than this
>> proposal.
>
> I’m not proposing to make QList inherit QVector. Actually, I’m
> making it an alias to QVector. See
> https://codereview.qt-project.org/c/qt/qtbase/+/242692 .
>
> With that, one option could be to make the alias dependent on a
> compile time setting for the application code (ie. have a simple
> define whether we do
>
> using QList = QVector
>
> Or
>
> using QList = Qt5Support::QList
Ok, QList as an alias for QVector takes care of the technical issues I
have with using inheritance. It doesn't address my concerns regarding
breaking QList behaviour. What purpose is served to call something QList
that is in fact a QVector? Please spell it out for me, as I don't see
it.
>> My fear is that QList : QVector will lead to some of Qt's APIs
>> continuing to use QList, which would lock Qt into QList for another
>> major release cycle and only postpone the inevitable QList removal.
>
> No, of course we need to get rid of all references to QList in our
> APIs.
I appreciate that commitment very much.
Thanks,
Marc
More information about the Development
mailing list