>>And, c'mon, std::optional's API is just not going to be topped by QOptional.

I don't know the QOptional plans (or no-plan), but as today, on the Mac,
the latest XCode 9.1 still does not provide std::optional.

With Qt, at least, when something is available, it is available in all
platforms, and Qt users can count on that.

>>Where I come from, we see customer's code "out there", and they almost never 
>>use Qt in isolation.
>> They have to interface with some 2rd-party library which, naturally, does 
>> _not_ use Qt types, but std ones,
>> and developers on those projects need to interact with both.
>> They also surprisingly often know about and use Boost.
>> Not only do they need to learn two different APIs (append() vs. push_back()),
>> they also face the impedance mismatch between Qt and every other C++ library 
>> on the planet.

I also see that, except that boost dependency is often rejected.
But I also hear praises about Qt documentation and ease of learning.

I like your expression "impedance mismatch", but don't see this as a
problem in practise.
I mean, when a std:: container needs to be used for an interface with
another library, then let's use is. No big deal.

Philippe

On Sat, 02 Dec 2017 17:48:19 +0100
Marc Mutz <marc.m...@kdab.com> wrote:

> On 2017-12-01 23:12, Philippe wrote:
> >>> it's existential for Qt to get off its own container classes.
> >>> I shall in the future extend that statement to anything that overlaps
> >>> with std.
> >
> > Two points to keep in mind:
> >
> > 1) the std implementation varies with compiler vendors, each one with a
> > different set of bugs, unit tests and sometimes performance. While with
> > Qt, the implementation is more uniform. This to say, I feel more secure
> > using Qt implementations for an application that runs on multiple
> > platforms. And cross-platform is the core business of Qt...
> 
> You make it sound as if std implementations are much more buggy than Qt's. I 
> don't even know how to respond. I'm sure STL, Marshal Clow, Howard Hinnant, 
> and all the others std library implementers will be pleased with your 
> analysis.
> 
> Have you tried using QVector with a type that has no default constructor? 
> Using that nice API forces users to supply an unnatural operation on their 
> types (if they control the types in the first place).
> 
> As I said multiple times before: my arguments would be pretty weak if Qt's 
> implementation quality matched or exceeded the quality of the corresponding 
> feature in the standard library (and that's why we have QStringView, 
> incomplete as it still is, because of QString), but except for QString, and 
> QFuture, which, however, lacks the QPromise counterpart, I don't see any 
> other cases.
> 
> > 2) a majority of Qt users are not C++ wizards, and ease of use /
> > intuitive api, is of primary importance... std does not always shine
> > here.
> 
> 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. These are 
> ideas that do not come from Qt. They come from C++/Boost. Qt is "stealing" 
> them, wrapping them up in a camelCase interface, omitting the hard parts of 
> the implementation, adding some optimisation for Qt types, and then stand 
> here as Thiago does and say that the Qt type needs to stay because of that 
> optimisation. Even new-style Qt 5 signal/slot connections were available in 
> this form in Boost since at least 1.32, ie. something like 2004. In Qt 3 
> times, people would have protected loudly over the need to write ugly code 
> like &QLineEdit::returnPressed instead of SIGNAL(returnPressed()), but lo and 
> behold, there's been no public outcry. Qt silently adopted the interface that 
> was inspired by it's own invention, but had since succeeded in keeping up w
 ith the rest of the world (Boost.Signals). That's a _good_ change. It helps 
people integrate their code with Qt. because integrate they must.
> 
> Where I come from, we see customer's code "out there", and they almost never 
> use Qt in isolation. They have to interface with some 2rd-party library 
> which, naturally, does _not_ use Qt types, but std ones, and developers on 
> those projects need to interact with both. They also surprisingly often know 
> about and use Boost. Not only do they need to learn two different APIs 
> (append() vs. push_back()), they also face the impedance mismatch between Qt 
> and every other C++ library on the planet.
> 
> Developers just can't cocoon inside the Qt world. They need to interact with 
> the real world, and Qt actively prevents that with its copies of upstream 
> APIs all over the place, and it's antiquated (read: pre-C++11) programming 
> model.
> 
> Two things have happened since 2010: C++ is progressing fast again, as a 
> language, and, more importantly, the _tooling_ situation has dramatically 
> improved. In a world where your static analysis tools actively warn you about 
> common Qt idioms (mutexes, but also naked new all over the place, in 
> violation of CoreGuidelines), Qt's insistence on providing it's own copies of 
> std functionality force users to choose between Qt-ish APIs or static 
> analysis coverage. A developer that chooses a nicer API if there's another 
> cross-platform alternative which is functionally at least on par, but better 
> integrated with his tools (IDE, compiler, clang-tidy, ...) should have a long 
> meeting with his manager.
> 
> But Qt is just maintaining it's own NIH/our-APIs-are-superior stance. As 
> evidenced by this thread. But it's users will move on. Personally, I'm doing 
> more Modern C++ trainings than Qt trainings these days. That has to do with 
> me not knowing QML much, but _also_ with a surge of interest in C++.
> 
> 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?
> 
> Thanks,
> Marc


_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to