On 2019-07-08 04:43, Thiago Macieira wrote:
On Sunday, 7 July 2019 23:26:40 -03 Konstantin Ritt wrote:
As we have string views now, I'd vote for deprecating the string
manipulation methods in QByteArray. I doubt we could make QByteArray a true vector of bytes now, without breaking lots of the user code, but that could
be a good first step.

We don't have any good 8-bit string manipulation functions outside of
QByteArray. They stay.

The question is whether the Latin1 methods (toUpper(), toLower() and the free function qstricmp) should be moved or removed. Those would work really well in QLatin1String, but QLatin1String is a view, since it doesn't own the data.
QLatin1String::toUpper() could return a QByteArray...

What I think when I read this is:

Backed by const char*, never implicit:
- QLatin1String - owner of L1 data [change from today, but not a breaking one] - QLatin1StringView - what QLatin1String is now [requires porting, but it's just s/QLatin1String/QLatin1StringView/g in client code]

Backed by const char8_t*, implicit:
- QUtf8String - owner of UTF-8 data
- QUtf8StringView - view over UTF-8 data

Backed by const char16_t*, implicit (from char16_t*, Q*StringView, NOT from QByteArray) - QString - owner of UTF-16 data [as before, possibly using char16_t internally to avoid the tons of ushort casts]
- QStringView - view over UTF-16 data

Backed by const std::byte*, implicit:
- QByteArray - owner of std::byte data, no string-like functions [breaking change, but anyway far in the future, as we can't depend on std::byte, yet]
- QByteArrayView - view over std::byte (uchar, char, ...) data.

QByteArray, QUtf8String and QLatin1String(new) could use the same backend, for zero-copy transformations between them.

Is this a realistic goal for Qt 7? Last time I proposed QUtf8String/View, it's usefulness was challenged. I think the advent of char8_t in C++20 and std::byte in C++17 change the game quite a bit, though.

I'm also looking at all the relational operators we have between our string-like classes, and it's ... frightening. Using views to define relations would allow to cut quite a lot of relational operator overloads.

Thanks,
Marc
_______________________________________________
Development mailing list
[email protected]
https://lists.qt-project.org/listinfo/development

Reply via email to