[Development] Use of Standard Library containers in Qt source code

Giuseppe D'Angelo giuseppe.dangelo at kdab.com
Fri Jul 1 22:13:42 CEST 2016


Howdy,

Il 01/07/2016 21:34, Thiago Macieira ha scritto:
> On sexta-feira, 1 de julho de 2016 11:36:56 PDT Thiago Macieira wrote:
>> Option 1:
>> Not use Standard Library containers, just use the Qt containers as they
>> exist.

However this is an anti-goal. As you stated, STL containers usage inside 
Qt is increasing for very good reasons. In the case in question, there 
isn't even a Qt equivalent for std::deque, and I don't see one coming 
anytime soon. (And even so, is it really going to outperform a container 
which has been around, studied, profiled, optimized, instrumented, for 
15+ years?)

>> Option 2:
>> Create new Qt containers to have the same complexity as Standard Library
>> containers, but following the Qt naming conventions. Possibly with implicit
>> sharing.

Again, also this looks like a massive anti-goal. I don't think we should 
invest any resource in this massive effort that reinvents the wheel, 
just for the sake of renaming a few functions.

(... not to mention that is extremely likely that we will always lag 
behind the current Standard and perform worse than any other STL 
implementation under any possible benchmark.

Even today: where is QList::push_back(T&&)? Where are our emplacement 
functions and their try versions? Where are our exception guarantees?)

>>
>> Option 3:
>> Create Qt API wrappers for those containers like std::deque, adding only a
>> few  inline functions to match the Qt-style API where the Standard Library
>> API deviates. Examples are:
>>          empty           ->      isEmpty
>>          push_back       ->      append
>>          front           ->      first
>>          pop_front       ->      takeFirst
>>          cbegin          ->      constBegin
>>          cfind           ->      constFind
>
> Of course, Option 4:
> Continue to allow Standard Library containers in internal code (no API or ABI
> constraining) where there's a clear gain in performance and/or size.

3 and 4 actually don't conflict, do they? If we subclass STL containers 
(say, in a QtStl namespace) and add those inline functions we would 
still be using them in the end. But before going this way, is it 
possible to estimate the amount of work to get this in place?

>
> Option 5:
> Allow Standard Library containers in internal code even if performance or code
> size gains are not appreciable or have not been measured.

Which again seems like a sensible thing to do in general, unless there 
are documented cases in which Qt containers significantly outperform STL 
ones (apart from implicit sharing).

IIRC, when there was the big thread about whether allowing STL 
containers or not in Qt implementation, people did such benchmarks and 
the results were always in favour of STL. Can anyone find the relative 
links...?

My 2 cents,
-- 
Giuseppe D'Angelo | giuseppe.dangelo at kdab.com | Senior Software Engineer
KDAB (UK) Ltd., a KDAB Group company | Tel: UK +44-1625-809908
KDAB - The Qt Experts

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4007 bytes
Desc: Firma crittografica S/MIME
URL: <http://lists.qt-project.org/pipermail/development/attachments/20160701/465658fb/attachment.bin>


More information about the Development mailing list