Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 22 Apr 2006 14:43:09 -0700
From:      Don Dugger <dugger@hotlz.com>
To:        =?ISO-8859-1?Q?Dag-Erling_Sm=F8rgrav?= <des@des.no>
Cc:        freebsd-chat@freebsd.org
Subject:   Re: Why is not more FreeBSD software written in C++?
Message-ID:  <444AA36D.50506@hotlz.com>
In-Reply-To: <86mzednwof.fsf@xps.des.no>
References:  <44490663.3040506@hotlz.com> <86d5f9pno8.fsf@xps.des.no>	<444A6B54.1030902@hotlz.com> <86vet1o5j3.fsf@xps.des.no>	<444A8106.5010801@hotlz.com> <86mzednwof.fsf@xps.des.no>

next in thread | previous in thread | raw e-mail | index | archive | help
Dag-Erling Smørgrav wrote:

>Don Dugger <dugger@hotlz.com> writes:
>  
>
>>Dag-Erling Smørgrav <des@des.no> writes:
>>    
>>
>>>Don Dugger <dugger@hotlz.com> writes:
>>>      
>>>
>>>>Dag-Erling Smørgrav <des@des.no> writes:
>>>>        
>>>>
>>>>>Don Dugger <dugger@hotlz.com> writes:
>>>>>          
>>>>>
>>>>>>The fact is that all your c code will compile in c++
>>>>>>            
>>>>>>
>>>>>That is wrong.  To name just one example, C++ is much stricter about
>>>>>type casts than C is.
>>>>>          
>>>>>
>>>>I mean the constructs. Casting will not change the functionality or
>>>>shouldn't.
>>>>        
>>>>
>>>It does.  Casting can be (and often is) used to force or avoid sign
>>>promotion in function arguments; for instance, isspace(ch) may produce
>>>incorrect results if ch is a char, so a cast to int is required.
>>>
>>>C allows any expression of pointer type to be assigned to a void *,
>>>and allows any expression of type void * to be assigned to any object
>>>pointer type.  C++ does not.  As a result, a typical C program which
>>>uses malloc() without casting the result will not compile cleanly with
>>>a C++ compiler.  A competent C programmer will balk at adding the cast
>>>that C++ requires; a competent C++ programmer will correctly point out
>>>that a C++ program should not use malloc() anyway.
>>>
>>>There are other incompatiblities: const has different semantics in C
>>>and C++, namespaces aren't quite the same (there is no separation
>>>between the typedef namespace and the struct namespace in C++), etc.
>>>      
>>>
>>And how does that change my point?
>>    
>>
>
>You claim (on the first line quoted above) that "all your c code will
>compile in c++".  I am trying to show that you are wrong.
>
>DES
>  
>
Ok I should have said most or some, but I'm taking about the original 
point which is
that c++ is not where the performance problem comes from it's the code 
in the
library or that was generated by the templates or many other thing and 
there are
trade offs no matter what you use and that many of the things like iostreams
come with a great deal of other functionality other then simply 
outputting a character
to the screen and if you use iostreams your going to pay for that 
functionality
with performance. You can however use the old c library stuff and get 
the same
performance you got with c. In all the case I saw for comparisson he 
used things
that were from iostrems.

Don 8)






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