[Development] QtCS 2017 QtCore sessions

Marc Mutz marc.mutz at kdab.com
Sun Dec 3 12:42:59 CET 2017

On 2017-12-02 18:54, Ville Voutilainen wrote:
> On 2 December 2017 at 18:48, Marc Mutz <marc.mutz at kdab.com> wrote:
>> If that analyis were true, you'd need to explain why it is, then, that 
>> the
>> Qt containers now have more or less the same API as std ones, when in 
>> Qt 1
>> they were very different. And why I keep needing to fight off 
>> QOptional.
> ..
>> And, c'mon, std::optional's API is just not going to be topped by 
>> QOptional.
>> What should they do? snake_case vs. camelCase? That's what we need to 
>> invest
>> several man-days of development work in, to rename the functions and 
>> stick a
>> Q in front of the class name?
> There's one thing that a QOptional could do that std::optional can't:
> be available for all Qt users
> in a time span of a couple of months.

And I'm not against it. I, personally, did that for 
qAsConst/std::as_const. And we had qtypetraits.h, too. But if we copy 
std functionality, it must be and stay 100% behaviour-compatible with 
the corresponding std type. As a consequence, it was trivial to move 
away from qtypetraits.h, and it will be trivial to move from qAsConst to 
std::as_const. The problem comes in when you add functionality to the Qt 
copy that is not in the std equivalent. As such, I'm asking, like for 
bug-fixes, to merge the feature upstream first, then implement it in Qt 
when it becomes apparent that upstream will adopt the change.

And as with qtypetraits.h, we should _copy_ a 3rd-party component 
instead of implementing it ourselves.

Another excellent example of correctly working with upstream is 
QRegularExpression. The author first added UTF-16 support to libpcre, 
and _then_ added QRegularExpression on top, instead of, like it was done 
for QRegExp, implement the automaton himself.

The QRegularExpression API is also closer to std::regex than QRegExp. 
The latter, despite originating in Qt, does not really have a more 
convenient API than std::regex.

But if a QOptional is added with a nullable-Qt-types optimisation 
already built-in, or QStringView(Char*) is missing constexpr when 
std::string_view(char*) does not, then this is a functional fork that I 
consider unacceptable.

So, to summarize my position:

1. It's ok for Qt to add copies of std functionality. It may even have a 
Qt-ish API (QClass::camelCase()).
2. But it must never, ever, add functionality that the std equivalent 
does not have.
3. Unless Qt is leap-frogging in front of the std with this (like 
Unicode support in QString), functionally. Performance does not count, 
as that should be fixed upstream.
4. Even so, Qt-as-a-project should actively participate in upstreams 
(incl., but not limited to, the C++ standard) to get added functionality 

An example of (4) would be for TQC to participate in the text_view 
discussion. Another is Olivier's co-operation with Herb and Andrew on 
exploring porting Qt's metaobject system to C++ metaclasses.


More information about the Development mailing list