To view parent comment, click here.
To read all comments associated with this story, please click here.
... Than again, I must wonder, what's the use?
If you cannot use:
- operators (kernel code that cannot be debugged by reading it is a big no-no in my view).
- virtual functions (as above, plus, they may hide a major performance hit due to unknown vtables depth/size).
- You are forced to write your own per-class init and close functions (lack of constructor and destructor error code).
- You are forced to re-implement new (over, say kmalloc, with some type of fancy error code management).
In the end, you're only left with objects and partial inheritance - or in-short, you more-or-less get an automated "this" pointer.
Call me crazy, but IMO, it's far easier to implement objects in pure C. (As it's already being done, quite successfully, in the Linux kernel)
P.S. Which kernel are you using?
- Gilboa
Edited 2010-10-14 22:42 UTC
Makes code a lot easier to read and work on for various reasons, enforces separation of the various components.
I use operator overloading heavily myself, since I implemented a cout-ish class for debug output (much easier to implement than printf, and more comfortable when it comes to using it IMO).
You can still debug with usual techniques like moving a breakpoint forward and see where things go wrong. If the code crashes after the instruction using the operator, you know who's faulty...
In a kernel, if the initialization of a basic component failed, I think it's time to panic() anyway. But if for some reason you really need an initialization/closing function to return an error code, you can just go the C way and use an "errno" global variable.
Well, new is only as complicated as you want it to be. If you want it to be an automatically-sized malloc, you can just write it this way. You're certainly *not* forced to reimplement new each time you write a new (duh) class.
Again, it's essentially a matter of high readability. In my experience, C code gets messy and unreadable a bit too easily, while with C++ it's easier to keep statements short and easy to read.
Every one has the right to have its own opinion
In my opinion, code readability is more important than ease of implementation. And my experience with Linux code is that it doesn't exactly take readability too far.
Couldn't get satisfied with the existing stuff (noticeably because I'm allergic to posix, which limits the range of possibilities quite a lot), so I rolled my own.
Edited 2010-10-15 05:56 UTC





Member since:
2010-03-08
Well, Stourstrup himself said that there's not a single favored way to use C++, and that not using every feature is not a crime or characterized incompetence.
In my case (kernel development), I currently use it as a very nice superset of C with classes and (very important) function and operator overloading. I also use references from time to time. That's it.
In that case, the sole runtime requirement is to run the constructors before the kernel. Not a big deal, the assembly snippet required in order to do that is only a few lines long.