[Geany-Devel] Let's move to C++98 - Re: Lets move to C99
Dimitar Zhekov
dimitar.zhekov at xxxxx
Mon Aug 26 18:54:53 UTC 2013
On Mon, 26 Aug 2013 16:07:13 +0100
Nick Treleaven <nick.treleaven at btinternet.com> wrote:
> I now think gradually using a (quite heavily restricted) subset of C++98
> for *some* source files might be better than moving to C99 [...]
>
> Reasons:
>
> * RAII - this is a pretty essential feature for safe resource
> management.
This works for global/static and auto classes. We can wrap a gchar *s
= g_strdup_printf() in a class, but I'd rather not... and you want to
ban "class".
> * References can be useful in making code more readable vs pointers.
But using both heavily (as GLib/GTK+ required pointers) will make it
harder to read.
> * 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.
Hmmm?..
> * Possibly we might use some STL containers internally.
There things are heavily templated. They generate more code,
compilation is slower, and (unless improved significantly from the last
time I tried them) the code is overall slower than using GArray/GList.
Moreover, you propose to ban "class".
> * Possibly we could use a GObject wrapper for safe reference counting.
Why? Where? How to do that without classes and destructors?
Note that gcc has a non-standard extension for RAII, which works with
the base C types. And Geany compiles with gcc only.
> * Possibly we could have some template function utilities instead of
> unsafe macros.
Do we need these macros to work with different types? If not, "inline
is already declared in a portable manner in the GLib headers and can be
used normally."
> 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)
+1. Earlier versions of Qt/KDE did that, don't know about current.
> There ought to be a way to disable mixed code and declarations, but
> maybe not.
Not AFAIK.
> I don't know if this can be enforced by g++, but I suggest we disallow
> these keywords:
>
> class
There isn't, that's THE most basic feature of C++.
And you can write classes with struct and union.
> dynamic_cast
-fno-rtti
> friend
No classes -> no usage for friends.
> mutable
> operator
> throw
-fno-exceptions
> virtual
No classes -> no virtual methods.
> Thoughts?
Sorry, but IMHO, that seems even more pointless than using C99.
--
E-gards: Jimmy
More information about the Devel
mailing list