On 13/05/2020 03.04, Lars Knoll wrote:
I don’t see a need to take a QStringView in those cases. With the
exception of some low level APIs, Qt’s APIs should be safe to use. An
overload taking a QStringView would either need to copy the data (in
which case we could just as well only offer the QString version), or
it holds an ‘unsecured’ pointer to the data, and lifetime is out of
control of the class.

The second option is something I’m only willing to accept in a very
limited number of cases, and the API naming should make it clear that
this is what’s happening.

I don't see a need for that.

An API that might retain a copy of a string should take a QString. An API that needs to *look at* a string, but will not *directly*¹ copy that data, should take a QStringView. If this isn't completely transparent to the user of the API, we're doing something wrong.

(¹ An API that must always make a deep copy, e.g. by storing a modified version of an input string, isn't making a "direct" copy.)

That said, you can run into issues if the implementation of the API changes.

You might call CoW naive, but I do believe that the fact that Qt does
use containers that own their data in most of our APIs is what makes
Qt significantly simpler and safer to use than many other APIs.

No question. On of the projects I work with uses std::shared_ptr all over the place, because large data structures get passed around a lot. One of the developers is absolutely fanatical about avoiding deep copies, although I personally have not seen hard data whether this is merited (but my suspicion is that it is).

Shared ownership is a pain point, because users have to be careful to make a copy (which, due to polymorphism, is already "hard") if they need to change data and aren't sure if anyone else is using the data. Unfortunately, all this was designed before I became involved, or I would have insisted on Qt-style CoW value-like semantics, which would have made the whole mess *much* safer and easier to use.

Qt did something right. Let's please not throw that away because it "isn't fashionable".

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

Reply via email to