On 26/08/2013 19:54, Dimitar Zhekov wrote:
On Mon, 26 Aug 2013 16:07:13 +0100 Nick Treleaven nick.treleaven@btinternet.com wrote:
- 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...
We don't always need a gchar*. For string processing we could use the STL basic_string (or Scintilla SString).
- 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.
Just use them where they help ;-)
- 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?..
Time spent for contributors who don't know C++ to learn the parts we use. What's the question?
- 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.
Slower compilation may be an issue. The minor performance/bloat differences you mention would not be a problem for Geany IMO.
Assuming we're comparing the same design in C vs templated C++ code, the C++ code would normally have an advantage because more code can be inlined. It might be at a disadvantage because of code bloat though, but the inlining may outweigh that. Are you sure you tested the C++ code with full compiler optimization?
Moreover, you propose to ban "class".
struct = class but with public member visibility by default.
- Possibly we could use a GObject wrapper for safe reference counting.
Why? Where? How to do that without classes and destructors?
Obviously you need destructors for RAII. I meant ban the keyword 'class' in Geany code, not in STL code.
Note that gcc has a non-standard extension for RAII, which works with the base C types. And Geany compiles with gcc only.
Really? Have you read HACKING?
- 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."
See FALLBACK in tagmanager. Matt doesn't like it though. I don't expect we need to replace many macros, more that some template utility functions will be useful in C++ code. I can give an example if you like.
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.
exactly.
dynamic_cast
-fno-rtti
ok.
friend
No classes -> no usage for friends.
...
virtual
No classes -> no virtual methods.
*cough* structs *cough*
throw
-fno-exceptions
nice
Thoughts?
Sorry, but IMHO, that seems even more pointless than using C99.
RAII != pointless