Re: linux headers and C++

Dancer (dancer@zeor.simegen.com)
Wed, 07 Jul 1999 00:35:31 +1000


Marco Ermini wrote:
>
> ----- Original Message -----
> From: Alan Cox <alan@lxorguk.ukuu.org.uk>
> To: <fbutter@ottomall.com.tw>
> Cc: <Jes.Sorensen@cern.ch>; <linux-kernel@vger.rutgers.edu>
> Sent: Tuesday, July 06, 1999 11:23 AM
> Subject: Re: linux headers and C++
>
> > Please don't confuse object oriented with C++. Decent programmers can
> write
> > object oriented assembler, fortran or even cobol (although they normally
> leave
> > in the latter case). Linux is heavily object oriented but without using a
> > glorified pre-processor on it
>
> I don't feel Linux is *so* object oriented.
> Apart from this C++ is no more just a
> pre-processor. Of course a C and ASM
> hacker could feel in this way, but it's not
> true; C++ could be used as an improved-C
> or as a full-featured OO-language. Using
> C or ASM or another language in an OO
> way without a specific support for this could
> lead to more complications that it's worth (i.e.
> you could program as you have inheritance
> without having a keyword to do it, but it's
> very difficoult to keep the code clean).
>
> Looking at the Linux source tree, I don't
> think Linux is OO. But I personally
> don't feel it as a limitation per se. WinNT
> is (maybe?) OO. What's the result? The
> only things that count, at the end, are the
> results. Linux could be not OO, but the
> sources are (quite) always clean and
> understandable.

OO doesn't imply inheritance. Yes, having language features that support
OO is nice, but it's possible to do good, clean OO code in C without
heaps of tangled, complex code....UNLESS you try to mimic the things
that a language with..*ahem* Let me try that sentence again: UNLESS you
try to do the really complicated stuff that the language support of (for
example) C++ or smalltalk hides the complexity of.

Multiple inheritance, virtual members, templates (ye gods)..each of
these things has layers of complexity. The fact that a compiler _hides_
that complexity from you doesn't make the end-code simple, and if you
try to implement foolishly complicated OO constructs in a non-OO
language, then you _do_ risk getting badly fuddled.

However: Basic object orientation (packages and interfaces and instance
data) is quite straightforward under C (and only marginally less so in
ASM) and in plenty of other procedural languages. We've been doing it
for years, and were probably doing it before someone gave it a name.

The kernel's full of OO code. So's glibc.

I _will_ grant that sometimes it is easier and cleaner to do some things
in a language with support for the whole OO paradigm. And sometimes it
isn't. It depends on what you're doing. It depends on what you're doing,
and how you go about it.

Sometimes C++ will do the whole bloat thing on you. And sometimes it
won't. It depends on what you're doing, and how you go about it.

The language is a tool and a description. Not a religion or a dogma. You
always try to select the best tool for the job...and in a cooperative
development environment sometimes the best tool is a tool that the other
people can use with equal facility.

For reference, I spend most of my time coding in C++. Because it happens
to be the best tool for the jobs I do. If a job warrants C (and some of
them do) then C code is what I write. I'm an atheist when it comes to
compiled languages.

D

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/