[Development] Feature Freeze Exception: QStringView

Marc Mutz marc.mutz at kdab.com
Tue Jan 31 12:07:52 CET 2017

Hi Lars,

On Tuesday 31 January 2017 10:08:35 Lars, Knoll wrote:
> > So, in order to give the maintainers more time for review, I'd like to
> > ask for a feature freeze extension for QStringView until end of next
> > week, plus a few days to deal with maintainer review comments.
> I understand that you want to have the patch series finally merged.
> Actually I do as well, I believe that QStringView is the right approach
> moving forward.
> But I do wonder about the approach here. The series has been around pretty
> much unchanged for quite some time now without anybody working on it. You
> had lots of time since summer to get this into shape an merged. Now, a
> week before the feature freeze and suddenly this absolutely has to go in?

I have been sxcheduled to work on this in January, but was out with sick child 
and then myself afterwards for almost two weeks. That's why it's late.

Then again, as you say, the main patch has been around for the better part of 
a year, and the basic idea has been around since the beginning.

> > Why should it be granted? Because QStringView is by far the biggest
> > revolution in Qt since 5.0, all the while integrating naturally and
> > step-by-step into existing code, _tremendously_ simplifying it along the
> > way (cf. the commits that start to make use of QStringView:
> > https://codereview.qt-
> > project.org/183864 https://codereview.qt-project.org/183925), esp. where,
> > in private API, we can already remove the other overloads.
> I agree, that the series cleans things up and is a great improvement. But
> the biggest revolution since 5.0? It's an API addition that brings
> performance optimisations in Qt's string handling.

No, this is not at all about performance. It's mostly about stream-lining the 
API, and adding flexibility:

1. Traditionally, a lot of stuff has been taking QString, and QString only. If
   you're lucky, you get (QChar*, int) on top, so you can use an automatic
   buffer to hold the string data, with all the ugliness at the
   call site that entails. QStringView takes all that pain and hides it
   (see https://codereview.qt-
   It also allows for clearer interfaces, because instead of a QString and an
   int, you can just pass a QStringView, since creating a sub-view suddenly
   costs nothing:

2. QStringView gives the caller the choice of container for string data. This
   makes Qt much more interoperable with 3rd-party libraries. QStringView will
   make QStringLiteral all but obsolete, since you can now just pass u"string"
   or, on Windows, L"string" to any QStringView-taking function. We can
   trivially define a QStringViewLiteral that uses one of the other, depending
   on platform. I backed that feature out, though, since I fist need to verify
   that we support no compilers anymore that would fall back to fromUtf8() for

3. And yes, performance. Where today we have to return QString, even where we
   know a maximum size, and even where we don't:  It will allow
   QLocale::toString() to return something equivalent to char16_t[N], e.g.
   std::array, in order to not allocate memory just to format numbers,
   something that has so far eluded any practical solution. For internal
   functions that return temporary QStrings, we can switch to QVarLengthArray,
   and avoid heap allocations in common cases.

The last such fundamental change to QtBase was the possibility to connect 
signals to lambdas. Believe me, QStringView has the same caliber.

> What would we really loose if we worked towards getting this into the dev
> branch in the next few weeks? We don't exactly have hundreds of
> users/customers who can't live without it. And pushing it into dev would
> give you lots of time to make sure we make best possible use of the class
> throughout all of Qt for 5.10.

I have found that even with just relational operators, conversions, and 
iterators (ie. just the Long-live commit in the series), maybe 
QString::append() and QStirngBuilder integration, you can already do a lot of 
stuff. For us, getting QStringView into dev next week means one week of delay, 
but for our users, it means half a year delay. Qt is desperately in need of 
better integration with std C++, and QStringView is hand-down the largest such 
contribution. Not having it means people will continue to spend^Wwaste time 
porting stuff to QStringRef, which will later be replaced by QStringView. 
Don#t get me wrong, I love the work Anton and others have done in the area. I 
now just need to grep for QStringRef to find code to port to QStringView, but 
the real value of QStringView lies in where there was no QStringRef-overload 
in the first place, e.g. QColor: https://codereview.qt-project.org/184038

In the end, it's your call, of course.

I personally don't care whether it goes into 5.9 or 5.10, but for our users 
and for other contributors, I hope that it makes it into 5.9, since, judging 
from 5.8, a lot of internal performance improvements come into stable 
branches, and we really don't need more QStringRef uses in Qt. esp. in public 
API, where we need to carry it all the way to Qt 6.


Marc Mutz <marc.mutz at kdab.com> | Senior Software Engineer
KDAB (Deutschland) GmbH & Co.KG, a KDAB Group Company
Tel: +49-30-521325470
KDAB - The Qt, C++ and OpenGL Experts

More information about the Development mailing list