[Development] Views

Mutz, Marc marc at kdab.com
Wed Jun 5 17:49:46 CEST 2019


On 2019-05-16 20:18, Mutz, Marc wrote:
[...]
> [1] Paraphrasing what Alex Stepanov teaches in his A9 courses: No C
> programmer would _ever_ get the idea to use a self-rebalancing
> red-black tree for something that holds a dozen elements. Because once
> you understand what is required to implement one, you'd shy away from
> the sheer complexity. Yet, in C++, just typing QMap makes the compiler
> do all that stuff for you. Don't use a map or a hash just because you
> can and the API is convenient. Use it when it makes sense, given what
> data is expected to be stored. And you will invariably end up with
> using vectors all over the place. According to Stepanov, developers
> wishing to use a map should seek a face-to-face meeting with their
> manager to explain why they need it :)

If you ever needed more convincing than an Alex Stepanov quote:

https://codereview.qt-project.org/c/qt/qtwayland/+/264069

I repeat here what I said in the commit message, only stronger:

As a library implementer, you are simply not _allowed_ the freedom to 
use a convenient tool over the most efficient one. That is, to put it 
mildly, a disservice to users and a disgrace to the profession of 
programmers. 8KiB just to look up a pointer in a map of {string, int}? 
That's 1/4th of the icache size of many processors!

And I'm not git-blaming to look up who wrote that QMap in the first 
place. Qt is *full* of this stuff and you all should really understand 
one thing: It's not about _your_ convenience. You are working for your 
_users_. And this isn't rocket science. Almost _twenty_ years ago, Scott 
Meyers wrote in Effective STL: "Prefer to use a sorted vector".

Is this code performance-critical? Probably not. But ... I mean ... 8 
fscking Kilobytes. That's two pages that don't need to be paged in. 
Multiply that by a 100 or so uses of QMap in a normal Qt application and 
you see where this is going.

Please, think of yours truly what you want, but keep your _users_ in 
mind. Users who need to strip down Qt so it fits on their devices 
because ... well, because you were too lazy to pick the right data 
structure.

Thanks,
Marc


More information about the Development mailing list