Alan Cox wrote:
Hi Alan -
guy. Somehow the kernel and Gnome reached a local optimum at the C
hacker level and that is where they stay.
The kernel uses C for good sound reasons - C++ is slower, harder to
Well C++ can generate pure C with no overhead, in the degenerate case
you are not using the C++ features. So it is not "slower" without some
qualification.
About ten years ago when I was struggling to understand what the C++
deal was about, I realized after it crashed in on me what the benefits
were (the moment I understood how virtual functions worked in the memory
footprint) that I had been blindly reaching for some of the same
principles in my C for some time, eg, binding related data into structs,
composing structs with other more primitive structs at the start, making
the equivalent of constructor functions to prep a struct, using function
pointers and so on.
When I look at bits of the kernel code I need to understand to write my
drivers, I strongly recognize the same aping of OO principles in a
pre-OO language. The shared mindmeld that produced such code is ripe to
move on IMO!
Since for the kernel there is an attempt at implementing the OO action
in C by hand at the moment, it is even harder to flat out say that C++
is "slower" without qualification, since it by delivering implicitly
what is done explicitly now it offsets at least some of the overhead.
debug and the tools suck in relative terms. You can use a subset of C++
to write OS core code, that has been demonstrated, but C++ is not
beneficial in that space. Much of that is down to the fact C++ is a
dreadfully designed language rather than going agains the basic argument
about using the right tools for the right job.
Well I think a lot of your skills, experience and opinion, in fact only
illness kept me from the last Linux World where I was anxious to hear
your security talk. But you only need to buy into a pretty thin subset
of C++ to get the bulk of the benefit IMO. You don't need any of that
">>" operator trickery or to use string.
From the kernel viewpoint C++ is the badly designed swiss army knife
bought in a cheap junk shop - it has lots of interesting ways to cut
yourself but none of the tools actually help you do anything useful.
For sure there is a lot that a wise person avoids, particularly in the
libs and templates, but the core class stuff only delivers wins IMO.
Just use it as a better C compiler that natively supports the
abstractions you already insisted to use, you don't have to buy into
anything else.
The original context was the relative success of a C++-based GUI and a
C-based one. Concepts like pure virtual classes give really strong
architectural structure to the implementation, a newbie can glance at
the class definitions and keenly understand the whole deal in a
hierarchical, complete and contained way. Deep structure is readably
captured by the class definitions and derivations.
Before I blew out of being a Windows Trained Monkey I wrote a lot of MFC
for UI, there is much to like in having UI elements integrated into an
OO language, this experience gives me the assurance to claim that C++
makes a major difference in the consistency and architecture you can
hope to succeed with.
-Andy