Re: Compiling C++ modules

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2 May 2006 21:21:44 +0300, Al Boldi <[email protected]> wrote:

> Christer Weinigel <[email protected]> wrote:
> >> eCos is nice enough -- because it's mostly C :)
> >
> > And those parts that are C++ (from a 2 year old eCos dist) won't
> > compile with a modern g++.
> 
> C++ is OO, and OO is great!  OO is the natural way of doing things, and 
> allows one to concentrate on the issues at hand, while leaving the 
> nitty-gritty to the compiler to decide.
> 
> And this is the problem, as kernel development is highly sensitive to 
> compiler output, and which is why there are parts written in asm and others 
> in C.
> 
> So rewriting C with C++ would be as dumb as rewriting asm with C.
> 
> But there may be certain higher level parts in the kernel that could benefit 
> from rewriting C with C++, much the same as lower level parts have benefited 
> from rewriting them in asm.
> 
> So we have a situation like this:
> 
> 	low-level written in asm when needed
> 
> 	main-level written in C mostly
> 
> 	high-level written in C++ when needed
> 

You can control low level features in C++ even much better than in asm.
Just an example. You can be pretty sure that a function like this:

inline void f(const int& x)
{
}

would use the parameter you pass to it without doing a copy on the stack.
And that is not dependent on anything.
For example, I wrote a vector library to do math with SSE, and there it
is fundamental that you don't _ever_ write a xmm register to the stack or
to memory in temporary variables. Look like this:

class Vector {
    float   f[4];

    typedef float __vr __attribute__((__mode__(__V4SF__),__aligned__(16)));
    
    Vector operator+(const __vr that) const
    {
	return __builtin_ia32_addps(...);
    };
    Vector operator-(const __vr that) const
    {
	return __builtin_ia32_subps(...);
    };
    ...
};

--
J.A. Magallon <jamagallon()able!es>     \               Software is like sex:
werewolf!able!es                         \         It's better when it's free
Mandriva Linux release 2006.1 (Cooker) for i586
Linux 2.6.16-jam11 (gcc 4.1.1 20060330 (prerelease)) #1 SMP PREEMPT Mon

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux