[Development] INTEGRITY
Thiago Macieira
thiago.macieira at intel.com
Thu Sep 19 23:47:00 CEST 2019
On Thursday, 19 September 2019 01:41:49 PDT Mutz, Marc via Development wrote:
> > Seems like it. Like I said, we've never required the C++11 standard
> > library
> > and we need to be sure the feature we need is supported before we
> > commit to
> > it.
>
> https://www.qt.io/blog/2016/06/16/qt-5-7-released
>
> > "we require a C++11[-]compliant compiler to build [...] Qt"
>
> The std library is not optional, unless you mean that Qt explicitly
> targets free-standing implementations. That, however, is not mentioned.
> When we dropped support for pre-C++98-compilers in 5.0, we also removed
> -no-stl, because that's natural. There's a technical distinction between
> the compiler and the std library, but from the POV of the standard, in
> hosted environments, there isn't.
You're mis-remembering or mis-interpreting the Qt 5.0 decision. The -no-stl
option was removed because we decided in 2012 that a C++98-compliant Standard
Library is required.
The wording in the Qt 5.7 changelog was:
- Starting with Qt 5.7, Qt requires a C++11 compiler with support for
C++11 atomics. This affects user code too: Qt headers no longer compile
with a C++98 compiler.
The Qt 5.6 and 5.7 wording was even more restrictive:
- Qt 5.7 will begin requiring certain C++11 features in order to
compile.
We've NEVER meant we required the entire C++11 core language and much less the
entire Standard Library. Up until Qt 5.12, we didn't require constexpr in at
least one compiler. We STILL don't require C++11's ref-qualified member
functions!
We also know that the Standard Library lags behind the Core Language in the
implementations. We have to be realist and know what we can and cannot depend
on.
And I've said in multiple reviews that the use of C++11 standard library
features needed to be tested. I've asked multiple times that we confirm which
features are safe to use in all our minimum implementations. Just search
Gerrit and this mailing list.
> QNX was a case where an older library (by a different vendor) shipped
> with a newer GCC, and that limited the use of library features in Qt,
> but that particular platform is now gone, and if Integrity has the same
> problem as that QNX toolchain had, it should have been removed along
> with it. Otherwise, we could've kept QNX along for the ride with no
> extra cost to the Qt project.
I agree with the "extra cost" argument. Platforms that don't move fast enough
impose a burden on us. I do like your cleanups in QtTest, for example -- we've
always had the rule that QtTest should use the least amount of Qt, so that we
can test buggy Qt in the first place.
> I think we should be way past caring for non-conforming platforms. We
> decided to use SD-6 macros for post-C++14 feature detection, even
> thought that meant that none of the features were detected for MSVC, a
> much more important platform that Integrity.
Correct, but we can't depend on C++14 anyway, so that meant little to our
functionality. Everything in Qt continued to compile and work even without
those macros.
That's a whole level of difference from dropping features or an entire
platform.
Still, it's a decision we can make. I'm not opposed to it, as I have been
bitten by Integrity's compiler shortcomings before (see QRandomGenerator's
integration log). But it's a *decision* to *change* our policy.
--
Thiago Macieira - thiago.macieira (AT) intel.com
Software Architect - Intel System Software Products
More information about the Development
mailing list