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

Nick Treleaven nick.treleaven at xxxxx
Thu Aug 29 12:08:55 UTC 2013


On 29/08/2013 02:39, Matthew Brush wrote:
> Personally, I think it'd be great to use C++ in Geany, and it would more
> than likely actually make it *easier* for people to contribute since
> outside of a sampling of GTK+-using desktop/GUI software (and obviously
> embedded, kernel, drivers, and similar), C is considered "dead" and the
> majority uses >= C++ (more likely Java, C#, Python ... many people also
> consider C++ outdated and dead for desktop GUI apps - not me BTW :). C++
> allows modern programming techniques but still retains much (or more) of
> the performance and "light-weightedness" that Geany strives for.

Yeah, templates make it much easier for libraries to have extra 
flexibility in performance.

> If we were to use C++, I think it'd be pointless to limit it to
> CFront/CwithClasses-style 1980's C++. We should use common/standard
> stuff like standard library containers, inheritance (maybe not
> multipl-inheritance), the class keyword, templates (where it makes
> sense), exceptions, etc. The issues/limits being discussed in this
> thread are issues long since considered "resolved" or "non-issues" for a
> long time for desktop software (and since a *long* time even before
> Geany's first line of code was written :). The style of code I read on
> the net and in talks and books and stuff is modern (ie. >= C++98) style
> C++ and I'd expect that's what the bulk of C++-using contributors would
> be used to using.

Idiomatic C++ takes a *lot* of learning and experience to get right for 
someone coming from C.

> I would even go so far as to say it's silly to not use C++11 since it's
> such a major improvement over previous C++ versions, in both performance

I'm curious, why does it perform better?

> and readability/coder-friendliness and it's well supported on current
> compilers and platforms.

Is it? I hadn't heard that, maybe. But I bet it will cause problems for 
some distro maintainers/builders on LTS distros.

Readability is definitely better in C++11 when avoiding iterators and 
using lambdas, but I was kind of hoping we could avoid those ugly cases. 
I wasn't thinking of using the STL heavily, just a few containers like 
string, and perhaps others for any specialized use cases.

Variadic templates are very cool also. (Die, stream << operators!)

> Since we're talking about better languages, there's also Vala which has
> most of the benefits discussed here about C++, already uses the same
> libraries and type-system as our existing G* code, is API compatible
> with C (in the sense that it generates idiomatic G*-style C code,
> mostly) and would be an easier transition for the vast quantity of C#
> programmers out there who might want to contribute, since the languages
> are so similar. Not sure it's a point since most of them use Mono and
> C#-strong IDEs, but still, in general there's probably substantially
> more developers out there who know C# better than C or C++.

I'm happy to consider using Vala, but I think it would probably be a lot 
less work to use C++ if we want to convert existing code.

> While it's a community project, and in general I think the popular
> opinion should ultimately prevail or at least that not one person
> (barring maybe a BDL) solely controls the direction of the project's
> momentum, it's somewhat harsh to make the current maintainer who does an
> excellent job and devotes a lot of time already to working on Geany
> stuff, to learn a whole different, non-trivial language, one he
> dislikes, and to become "more proficient than average" in order to be
> able to continue doing code reviews, merging PRs and stuff.

+1. Although I would definitely be keener to contribute using restricted 
C++, I don't want to be maintainer again. Thanks for all the great work 
Colomban (and others) ;-)

> I'm all for using modern C++ in strategic (or new) places and I'm
> totally against using ancient 1980/90's CFront-style C++ or that which
> is restricted so much that it's basically C.

totally against :-O

RAII is a powerful feature that standard C has no hope of competing 
with. It basically allows a string type with automatic memory 
management. Ditto for templates, but I can live without defining our own 
templates if that helps contributor understanding & maintainability.

I proposed banning OOP, operator overloading and exceptions in src to 
make it (much?) easier to understand & maintain the code vs idiomatic 
C++, with all its unintuitive bug-prone corner cases (which are still in 
C++11), see my reply to Lex for more info.

> Maybe rather than bikeshed about it too much, we can wait until someone
> wants to add a new module, or replace an existing module (I'm looking at
> you TM!), or some actual use case, at which point we could discuss
> whether it makes sense to use C++ for it, and since we already use C++
> for Scintilla, it's not a huge change to use it in another new C++
> module with respect to the build systems and stuff.

Yes, or maybe convert a core plugin that uses strings a lot, so we get 
the benefit of RAII. I might look into it unless Colomban is against 
that (even for a core plugin).

> P.S. As usual, sorry for such a long message :)

No problem, it was an interesting read.



More information about the Devel mailing list