[Development] HEADS-UP: QStringLiteral
Bogdan Vatra
bogdan.vatra at kdab.com
Tue Aug 20 17:56:06 CEST 2019
Hi,
Isn't silly to have so many wrappers around a such a simple thing as
strings? All the major frameworks out there (i.e. Java, C#) they have a single
String which does all the magic.
In Qt we have: QString, lost of QString::fromXXX, QLatin1String,
QStringLiteral, QStringView, QByteArray (which si a castrated version of
QString for some kind of utf-8 strings) and of course a few QByteArray::from.
You might think using QString{u"myString"} will save you from all these
madness and to save a few CPU ticks, well, you have tot think again,
QString{u"myString"} isn't working!
Is it that hard to have *A* single String for UTF-16 and *A* single one for
UTF-8? Ot at least A single String class and *A* single sting wrapper for each
UTF?
Cheers,
BogDan.
În ziua de marți, 20 august 2019, la 13:04:12 EEST, Mutz, Marc via Development
a scris:
> Hi,
>
> In light of a recent attempt to re-introduce QStringLiteral, relacing
> QLatin1String, I'd like to remind everyone that QStringLiteral has a lot
> of drawbacks and should not be used unless it saves a memory allocation.
>
> Drawbacks include:
>
> - doubled storage requirements (2 bytes/char) over a L1/US-ASCII string
> - unsharability with C strings (each QStringLiteral contains a new
> lambda, lambdas have unique types, static data in token-for-token
> identical lambdas is duplicated, merging these violates the standard)
> - introduction of QString dtor calls (cannot be optimized away)
>
> Anti-patterns include: Using QStringLiteral in
>
> - comparisons (includes relational operators, indexOf, contains)
> - composition (QStringBuilder, append, prepend, arg() (now partly
> available on QStringView and QLatin1String, too)
> - lookup and, I believe, even insertion, in JSON and soon CBOR classes
> - debug statements (we prefer debug code to be compact, not fast)
> - arguments to any other function overloaded QStringView or
> QLatin1String
>
> Alternatives to QStringLiteral:
>
> - u"..." (→ QStringView)
> - QLatin1String
>
> Please take note of the following recent developments:
>
> - arg(string, ...., string) ("multiArg") is available now on QL1S and
> QStringView
> - number formatting isn't, yet
> - You can use u"..." in Qt sources unconditionally
> - converts implicitly to QStringView
> - To convert QString → QStringView, prefer qToStringViewIgnoringNull()
> when you don't need to distinguish between the null and the empty state.
> It saves a branch.
>
> Please help spreading this knowledge in review and your own work.
>
> Thanks,
> Marc
>
> _______________________________________________
> Development mailing list
> Development at qt-project.org
> https://lists.qt-project.org/listinfo/development
More information about the Development
mailing list