[openbeos] Re: C++ in the kernel
- From: "Michael Phipps" <mphipps1@xxxxxxxxxxxxxxxx>
- To: openbeos@xxxxxxxxxxxxx
- Date: Sun, 23 Feb 2003 13:34:03 -0500
>> Here's my impression of the current blacklist (some of these have
>> been explained to me before, but the explanations didn't really stick
>> :-):
>> - exceptions: not sure why
>
>Exceptions are realized in the C++ link library which doesn't exist in
>the kernel - of course, you could write your own little implementation
>and they would work. But it's not worth it, I think, as it is easier to
>not check against a specific error value (and be safe) as to not caught
>an exception (and be safe) - and you certainly don't want to end up
>with "catch (...)" everywhere.
Exceptions (in C++) are not a really good paradigm for kernel work anyway,
unless you have a completely C++ kernel. Why, you may ask? Well, let me share
an experience from VM2.
I am using exceptions in VM2, WHILE IT IS IN USER LAND, to emulate signal
handling.
I recently ran into a situation where the whole VM hung with no explanation. It
turned out that I had a semaphore locked and threw an exception. When another
thread tried to run, it was completely blocked.
The solution is one of:
1) A "finally" clause, like in Java, where no matter what code path occurs,
exception or not, certain things happen.
2) A constructed class (like a BAutoLocker) that will go out of scope when the
exception occurs
3) Don't use exceptions
4) Replicate all of the "normal exit" code before throwing.
1 isn't an option. 2 could be done. 3 was my final choice and 4 was my interim
solution.
>> - virtuals: not sure why
>
>Virtuals are possible - just RTTI needs some bits from the C++ link
>library that you would have to implement yourself. Of course, that
>would make the kernel dependent on a specific compiler version which we
>want to avoid for the time being.
Yes. Also the performance issues.
>> - STL: not sure why
>
>Only because it uses features that need aren't provided in the kernel C
>++ runtime library. But it's possible to find your way around it, as
>outlined above.
STL has potential to be a performance issue. This is not a criticism of it, as
such,
but STL makes it very easy to do bad (slow) things. It also makes doing good
things
easier.
>> And here are a couple I'm specifically curious about:
>> - new and delete
>> - templates (and no, I don't need to know who thinks templates are
>> God
>> given and who thinks they're the spawn of the devil, just whether I
>> can use them or not, thank you :-)
>
>Those will work fine. "new" and "delete" operators both have to be
>defined yourself, but this is easy (it's almost a simple malloc()/
>free() on your part).
Templates. Hmph. :-)
- Follow-Ups:
- [openbeos] Re: C++ in the kernel
- From: Axel =?iso-8859-1?q?D=F6rfler
- [openbeos] Re: C++ in the kernel
- From: Ingo Weinhold
Other related posts:
- » [openbeos] C++ in the kernel
- » [openbeos] Re: C++ in the kernel
- » [openbeos] Re: C++ in the kernel
- » [openbeos] Re: C++ in the kernel
- » [openbeos] Re: C++ in the kernel
- » [openbeos] Re: C++ in the kernel
- » [openbeos] Re: C++ in the kernel
- » [openbeos] Re: C++ in the kernel
- » [openbeos] Re: C++ in the kernel
- » [openbeos] Re: C++ in the kernel
- » [openbeos] Re: C++ in the kernel
- » [openbeos] Re: C++ in the kernel
- » [openbeos] Re: C++ in the kernel
- » [openbeos] Re: C++ in the kernel
- » [openbeos] Re: C++ in the kernel
- » [openbeos] Re: C++ in the kernel
- [openbeos] Re: C++ in the kernel
- From: Axel =?iso-8859-1?q?D=F6rfler
- [openbeos] Re: C++ in the kernel
- From: Ingo Weinhold