Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 12 Jul 2006 01:40:01 +0800
From:      mag@intron.ac
To:        Joerg Sonnenberger <joerg@britannica.bec.de>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: kern/99979: Get Ready for Kernel Module in C++
Message-ID:  <1152639658.28572@origin.intron.ac>
In-Reply-To: <20060711152231.GB1487@britannica.bec.de>
References:  <84dead720607092015q7f1701abse143f3855c2aa95a@mail.gmail.com> <1152540567.99616@origin.intron.ac> <44B2AE69.4080703@elischer.org> <44B2D2DF.2000401@sh.cvut.cz> <86sll8zl9x.fsf@xps.des.no> <courier.44B35DBC.00003F75@intron.ac> <86fyh8zgw8.fsf@xps.des.no> <courier.44B37714.00004B4D@intron.ac> <868xn0z8w9.fsf@xps.des.no> <1152629241.24779@origin.intron.ac> <20060711152231.GB1487@britannica.bec.de>

next in thread | previous in thread | raw e-mail | index | archive | help
Joerg Sonnenberger wrote:

> On Tue, Jul 11, 2006 at 10:45:52PM +0800, mag@intron.ac wrote:
>> Just as you said, C++ is more complicated than C. However, without
>> C++ exception and other advanced features, it hasn't brought much
>> complexity to C++ runtime library. Early C++ compiler even translates
>> C++ code into C code before real compilation.
> 
> RTTI, allocation, exceptions and static allocators all add complexity
> for the runtime library. If you really want to use C++ for a kernel, you
> must likely want to use all of them as well.
> 
>> For example, I think C++ exception handling is really poorly suited for
>> low-level code.
> 
> Bullshit. With a proper implementation exceptions add no overhead as
> long an exception is not thrown in terms of speed. It does matter
> somewhat in terms of code (or better: data) size, but the very same
> information is useful to generate much better tracebacks as well.
> RTTI is highly useful for debugging and semi-optional consistent checks,
> which should not be neglected either. I don't care about the abuse of
> explicitly comparing object types etc., but the ability to decide what
> exactly a certain object is.

      Aside from the complexity of C++ exception support, in FreeBSD
kernel, every exception must be carefully processed, simple
exception throw and catch may lay memory leak and resource non-freeing
inside kernel if the programmer fails to pay enough attention.
      Even if C++ code is carefully written for FreeBSD kernel, outer
exception catch is so difficult to help deep inner exception.

> 
>> But the "object model" is still obscure to understand no matter how many
>> people all over the world master C++. What's more, can the "object model"
>> function really as OpenDarwin's IOKit class model?
>> (http://developer.apple.com/documentation/DeviceDrivers/Conceptual/IOKitFundamentals/HelperClassesChart/chapter_12_section_1.html)
> 
> The kobj implementation has the same feature set as a lightweight C++,
> e.g. inheritance and virtual functions. That's basically what IOKit is
> using as well. It is not obscure, just a Domain Specific Language.

      A domain specific language, C function pointer list, software
context and other independent kernel functions are obscure enough for
FreeBSD newbies.

> 
>> Now, OpenDarwin has owned a C++-based kernel object model. But why
>> cannot FreeBSD?
> 
> Because the kernel is C and not many points to incrementally add C++
> have been made, which makes it a worthwhile goal.
> 
> And if you want to complain about redundancy in drivers, carefully look
> for differences which often far outweight the common functionality.

      If there's only small differences, there operations can be packed
into a function tunable by some arguments.

> 
> Joerg
> _______________________________________________
> freebsd-hackers@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"


------------------------------------------------------------------------
                                                From Beijing, China




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1152639658.28572>