[Geany-Devel] Let's move to C++98 - Re: Lets move to C99

Nick Treleaven nick.treleaven at xxxxx
Mon Aug 26 15:07:13 UTC 2013


 From the C99 discussion:

lex:
 >>> Unless we follow the example of gcc itself and upgrade to C++ :)

me:
 >> Not sure that's a good idea for Geany now, although I'm glad that gcc
 >> did it. They use a restricted subset IIRC. I miss templates and RAII in
 >> C though.

I now think gradually using a (quite heavily restricted) subset of C++98 
for *some* source files might be better than moving to C99 (more on that 
below). I still support C99 over just C90 though. (I don't do a lot of 
Geany coding now, but I plan to do some from time to time, so obviously 
this is just my opinion and less important than more active devs).

Reasons:

* No build problems for Long Term Support distros that don't support C99 
(but clearly do compile scintilla's C++98).

* RAII - this is a pretty essential feature for safe resource 
management. It's a stupid acronym though, it's basically automatic 
scoped destruction:

http://en.wikipedia.org/wiki/Resource_Acquisition_is_Initialization

* References can be useful in making code more readable vs pointers.

* Developer enjoyment, productivity & gaining more experience with C++. 
(This might be an incentive for e.g. me to spend more time working on 
Geany). This has to be offset against those that might need to learn 
e.g. RAII.

* Possibly we might use some STL containers internally.

* Possibly we could use a GObject wrapper for safe reference counting. I 
don't want to add any dependencies on C++ libraries though.

* Possibly we could have some template function utilities instead of 
unsafe macros. Although I think most header files should be kept C90 
compatible.

matt:
 > +1. While I'm also not sure it's a good idea in Geany and certainly
 > won't be pressing for it anytime soon, 90% of C++'s crumminess is due to
 > backwards compatibility with C, so I think it should be (theoretically,
 > not socially) possible to gradually transition from one to the other in
 > a project like Geany without too much pain.

colomban:
 > I doubt it, C++ is sufficiently different from a C program not to be
 > compilable by a C++ compiler in many cases -- even if it is just for
 > some implicit casts C++ requires to be explicit (IIRC), and there are
 > plenty.  Or maybe it depends what "too much pain" means:)
 >
 > Also, I doubt it's any kind of sensible either, because good C++ use is
 > sufficiently different from C to require large rewrite.  In this case,
 > better rewrite everything and don't keep the clumsy code

I disagree it *requires* a large rewrite. You can make *good* use of 
some C++ features without having *idiomatic* use of C++. (E.g. dmd, the 
reference D compiler is not written in idiomatic C++ - it doesn't use 
the STL really, but it's still good code).

I think it would be quite manageable. If we did this, I suggest just 
converting one source file at a time, and only files that can benefit 
from RAII and/or the more powerful type system.

We would also need to disable some C++ features. I hoped we could do 
that with g++ flags, but I've only found this so far:

-fno-rtti (disable runtime info for object inheritance)

There ought to be a way to disable mixed code and declarations, but 
maybe not.

I don't know if this can be enforced by g++, but I suggest we disallow 
these keywords:

class
dynamic_cast
friend
mutable
operator
throw
virtual

That could be enforced with a 'make check' build target.

Thoughts?

Regards,
Nick


More information about the Devel mailing list