On 2019-08-22 15:42, Tor Arne Vestbø wrote:
On 22 Aug 2019, at 15:11, Mutz, Marc via Development <development@qt-project.org> wrote:

We need to collectively understand that implementing a library is different from the library's API and from use of the API. Anyone who thinks otherwise is invited to have a look at qmetatype.h or qtypeinfo.h. All users see from this is Q_DECLARE_METATYPE, and we don't really care whether they use Q_DECLARE_TYPEINFO. But a Qt developer mustn't forget to add Q_DECLARE_TYPEINFO, because it's a BiC change to add it afterwards, and there are tons of Qt optimisations hinging on getting that correct. Qt developers are under very different constraints than Qt users, and we can't go on pretending that it's ok to develop Qt as if we were developing a throw-away Qt app and that profiling will show us where to optimise.

The notion that developing a generic library is “harder” than
application development is no excuse for not having good APIs for our
own internal use. Nor is it an excuse for micro optimising every code
path “just in case”. A lot of the “library” development in Qt are
features and convenience, where the availability and ease of use of
the feature is itself more important to our users than whether or not
it performs optimally in every single use-case. As long as the API is
not painting us into a corner the code can in many cases be optimised
incrementally when and if it turns out to be a problem.

Qt is a large project, with a wide range of areas. If the mental model
for developing Qt requires you to take into account every single
corner case or micro-optimisation possible you’ll end up with 10
perfect string classes and nothing that uses them because the feature
development will grind to a halt. This also goes for increasing
std-ization of Qt, where the use of the std-library ends up
obfuscating what the code is actually doing.

I'm sorry if I sound blunt, but this is just nonsense. What you call optimisation, isn't. Using QStringLiteral or QLatin1String is equally readable. As is just using "". Aye, it's more to _think_ and to _write_, but we don't care about those metrics. The same goes for QList vs. QVector vs. std::vector. Anyone who claims that one is any more or less readable than the other is ... to say it politely ... mistaking brevity for clarity.

So, given equally-readable alternatives, it behooves every programmer to choose the most efficient one. This is what is called "avoiding premature pessimisation", it's nothing new, it's not something I invented, it's coming up on 25 years of age, at least. And it is not optimisation, premature or otherwise. It was Scott Meyers that coined the term, though I'm sure good programmers have known this for decades, just not under that name.

And QLatin1String and QStringLiteral are of Trolltech's making. Go to the internal history and go discuss with the original authors. From my pov, they solved and still solve particular needs. Those needs don't overlap, and they also don't overlap with simple "" or u"", so a programmer should be able to learn when to use which one. This isn't rocket science.

And, finally, if I hear, once more, implied or explicitly, about how wonderfully readable Qt sources are, or "were", implying "before Marc came and ruined everything", I _will_ print QBezier::split() in the 5.13 form and throw it from Frankfurt all the way to Oslo.

Seriously.

Thanks,
Marc
_______________________________________________
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development

Reply via email to