> On 6 Jun 2019, at 14:49, Mutz, Marc via Development > <development@qt-project.org> wrote: > > On 2019-06-06 14:04, Lars Knoll wrote: >>> On 6 Jun 2019, at 13:39, Mutz, Marc via Development >>> <development@qt-project.org> wrote: > [...] >>> You are equating Qt users and Qt implementers. You can maintain the Qt API, >>> but use more efficient data structures in the implementation. You seem to >>> be implying that these two things cannot be separated. >> The comment above was aimed at our APIs and towards our users, not >> about how we implement things internally. > > Ok, clash of context. This subthread was about the exact change in QtWayland, > though, and that's internal implementation. > >>> None of the changes where I replaced QMap changes the public API at all >>> (except adding an overload because we can). No user is affected by this in >>> any way, except that they have a few pages of memory more free than before. >>> Please explain to me how any of those changes makes _users_ of Qt have to >>> revert to the STL? >>> And please explain to me how it can possibly be worthwhile to generate 8KiB >>> of code _just_ to not have to use lower_bound? Which argument could >>> *possibly* be made against a lower_bound? Esp. seeing as many attempts to >>> write one by hand have failed. I remember a bug about shortcuts being >>> mapped to the wrong key, because the hand-rolled binary search was unstable. >> You have in general been advocating lately to remove/deprecate lots of >> Qt API in favour of STL. This is what I referred to, not >> implementation details in our code. > > Ok, noted. > >> Removing the usage of a QMap for a mapping of 5 values is the right >> thing to do. Whether we need lower_bound() for that and a sorted list, >> or simply an unsorted vector where we iterate until we find the right >> value doesn’t matter too much in this case. Performance wise both >> would probably be equivalent :) >>> I'm sorry, but we have a lot of code that is less readable than any of the >>> changes I uploaded. It just cannot be an argument to say that it's >>> unreadable because it uses an STL algorithm. This sentiment has caused so >>> very, very many quadratic loops because people get the impression that >>> std::remove_if is toxic, and in each one the solution was to use remove_if, >>> because the hand-rolled alternative would be totally unreadable. >> Nobody here said that. I also believe those changes that you proposed >> got approved to the largest degree. > > This is not the impression I get from > https://codereview.qt-project.org/c/qt/qtwayland/+/264069, or > https://codereview.qt-project.org/c/qt/qtbase/+/264129 vs. > https://codereview.qt-project.org/c/qt/qtbase/+/264161 > >> If you read what I said earlier, I also said that in most cases better >> data structures and algorithms will lead to more readable code. I am >> not opposed to using those in Qt, quite the opposite. > > Good. > >>> I'm sad to see that Qt devs think so lowly of themselves as to be unable to >>> understand a piece of code that uses an STL algorithm. Really. I'm out of >>> words. >> Nobody ever said that as far as I can tell. What people said is that >> there are cases, where a loop is just as efficient and easier to read >> (e.g. when searching for an entry). And in that case it’s fine to >> simply use that. So please stop turning the meaning of what people >> said around like that. > > I was a poignant remark, yes, but that's _exactly_ the feedback I get from > the reviews I quoted above: Dropping QMap is acceptable when the API is > unchanged (as with the array replacing the map), but totally not acceptable > (b/c/o unreadable) if it contains lower_bound or find_if. To the point that > the 'better' choice is to replace QMap with QHash - because they have the > same API. I'd ROTFL if I wasn't crying.
The discussion showed that replacing QMap with QHash gives you most of the improvement that you wanted. I can understand that maintainers don’t like if the change adds ~40 lines that can’t be shared, and complicate the code. We are spending a lot of time maintaining our code base, and simplifying our lives there is extremely important as we have limited man-power available. This is especially true if similar changes are being done in many places in our code base. With respect to that I can see why people argue for using either a QHash (where the change is a one liner), or ask you to consider providing a (maybe internal) special class that can be used as a drop in replacement. Cheers, Lars _______________________________________________ Development mailing list Development@qt-project.org https://lists.qt-project.org/listinfo/development