I've already heard those arguments, however we _can't_ use std::vector in
API, because it's implementation may differ between compliers (gcc and
clang stdlibs, for example).
But we can use some features that implemented in the same way (std::pair or
std::exception).
You can continue to say how bad QVector is (and it is) but it will not be
thrown away in near future.
Same is for std::optional. Are they compatible between clang and gcc? (and
between different versions of gcc (std::unordered_map was not))

2016-01-15 14:20 GMT+03:00 Marc Mutz <marc.m...@kdab.com>:

> On Friday 15 January 2016 03:58:12 Kevin Kofler wrote:
> > Иван Комиссаров wrote:
> > > Still, what about policy not to use std:: classes in Qt API?
> >
> > So why not just add a QOptional that works the same as std::optional?
>
> a) because we can't (we don't yet require the necessary language features)
> b) because once introduced, people will add all kinds of Qt-specific stuff
> to
>   it, making it impossible to replace it with std::optional down the road.
> And
>   since it will be good enough for the low demands of Qt development, it
> will
>   no longer see development and fall behind the state of the art.
>
> <rant>
> Consider QVector: it has been Qt-ifed by both adding (technically) useless
> duplicate Qt-ish API, CoW, and a Qt-specific type classification scheme
> plus
> corresponding optimisations that make it very hard to argue for std::vector
> use instead. The Qt community had two decades where they could have
> influenced
> the direction std::vector would take so it could allow the same
> optimisations
> that QVector has, but the time and energy was instead put into re-writing
> the
> containers for every major release (yes, for Qt 5, too, and Thiago's Qt 6
> QVector again looks much different from the Qt 5 one).
>
> The CoW makes QVector slow and increase code size, leads to hidden detaches
> that not even Qt experts regularly avoid in their daily work, and doesn't
> even
> work properly because you can take iterators into a QVector and, after
> copying
> the vector, change both copies through the iterator into the first. That
> is a
> conscious trade-off because making the container unsharable, as it must
> become
> once it hands out iterators, would make CoW fail to take effect _all the
> time_.
> But it leads to careless copying of QVectors that also doesn't really help
> with porting to std::vector.
>
> All the while - and I don't believe I'm saying this - std::vector *blazes
> the
> trail* with move semantics, emplace_back and stateful allocators (making
> QVarLengthArray all but useless). Does QVector use move semantics? No. Does
> QVector have emplace_back? No. Does QVector have an allocator, even one
> that,
> citing Alexandrescu, actually deals with allocation? No. Does QVector, even
> with Q_PRIMITIVE_TYPE payloads, expand to less code as std::vector? No:
> https://codereview.qt-project.org/145587 (comment from 01-14 11:21). Does
> QVector have a debug mode comparable to that of std::vector
> implementations?
> Nope.
>
> Or: The only reason I ever used std::list was to use its splice() feature.
> Does QLinkedList have splice()? No, of course not. Because it _cannot_
> (it's
> CoWed: how do you take ownership of nodes if the they are shared? By
> copying
> all other nodes in a detach()?).
>
> This is why we need to stop duplicating std API. It's not Qt's core
> competency
> to meddle with things we only have a half-interest in. It's fun to write
> QOptional. Until it isn't anymore. And then the (Qt) world needs to live
> with
> the poor-man's std::optional for the next few decades.
> </rant>
>
> Please, no.
>
> Thanks,
> Marc
>
> --
> Marc Mutz <marc.m...@kdab.com> | Senior Software Engineer
> KDAB (Deutschland) GmbH & Co.KG, a KDAB Group Company
> Tel: +49-30-521325470
> KDAB - The Qt Experts
> _______________________________________________
> Development mailing list
> Development@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
>
_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to