[Geany-Devel] Lets move to C99

Matthew Brush mbrush at xxxxx
Fri Aug 16 23:01:48 UTC 2013


On 13-08-16 01:57 PM, Colomban Wendling wrote:
> Le 16/08/2013 22:09, Matthew Brush a écrit :
>> [...]
>>
>> Not meant as a rant against G*,
>
> Sorry then, I read the final sentences as such, sorry.
>
>> when it was started (~1998 IIRC), there
>> was a reason for wrapping all the (then) non-standard stuff for
>> portability. But now, it just makes it harder for people to contribute
>> code since many are used to using standard C (or more likely C++) and
>> have to double check everything to make sure that nothing post 1989 was
>> used unless it has a g in front of it.
>
> You're dreaming, I 99.99999% sure *nobody* does it, and if we don't have
> to change much is only because there aren't much use of the things C99
> adds.  And at worse it's only adding "g_" in front, it doesn't really
> mangle the name.
>
>>>> P.S. Sorry for the bikeshed bait.
>>>
>>> Yeah, and sorry to sound so annoying (especially in the other mail ;),
>>> but I really see this as "let's upgrade for the sake of upgrading", and
>>> I don't see the point.  And this annoys me when you try to justify it by
>>> ranting against G* -- not that I care about the rant, but because it's a
>>> false justification.
>>>
>>
>> Although I often do rant against G*, I didn't do that here at all, I
>> don't think. My point is why does everyone (core devs and especially
>> other drive-by contributors) have to use rules from before you were born
>> (or so), just for the sake of you being able to stick -pedantic -std=c89
>> on your compiler command line? It seems so arbitrary.
>
> A: Why not?  Or, so we don't get mixed declaration and code, it just
> doesn't build with -std=c89 :)
>

While I agree mixing declaration and code is almost always a bad thing 
(generally means you should have another scope), I'm pretty sure it does 
have sometimes a usefulness. One fake example could be:

     int foo, bar;
     GtkWidget *blah;

     ... 50 lines of code using foo, bar and blah ...

     bool result = something_at_end(blah);
     if (result)
	do_something_special();
     return result;

> Although I'm not fan of the idea, I wouldn't bikeshed against it if
> there was a reason *to* do so.  The only one I see in your mail is
> "Allowed to declare loop counter-style variable inside the for loop",
> and I don't find it worth even updating HACKING.
>

Actually I provided a list of 44 new features, of which we all seem to 
agree (even you) that a subset of those are useful.

>> Even if it was only for // comments, what's the argument for *NOT*
>> starting to use a well-established ISO standard that's already one full
>> iteration behind the current standard? Sure we might only use 4 or 5
>> "new" language features in practice as opposed to the full list I
>> pasted, but so what? Why not? What do we lose by doing this?
>
> What do we get?
>

I'm pretty sure I already gave a list of things, including a number of 
those that we all seem to think are useful, but I'll filter out and 
repeat here:

1. Variable length arrays
2. Translation unit limits (IIUC - and not super compelling)
	- Longer string literals (from 509 chars to 4095) after concat
	- Number of external variables (think of those from sys hdrs)
	- Number of nested includes (again gtk/sys hdrs)
	- Number of enumerators in an enum (from 127 to 1023)
3. Remove implicit int (useful for when you made a typo, like forgetting 
return statement, although compiler usually warns anyway).
4. Reliable integer division (always rounds in same direction)
5. Compound literals
6. Designated initializers
7. // comments
8. Extended integer types (can use std names rather than g ones)
9. Remove implicit func. decls (compiler usually warns, but still)
10. Mixed declaration and code (as example above it *might* be useful 
once in a while, but nothing says our style guide can't disallow it).
11. Vararg macros (IIRC the thing you mentioned can be avoided by 
combining the arguments - would need to confirm, I've only used the GCC 
extensions for this).
12. Trailing comma in enums (no biggie but it's useful in case of 
modifying or re-arranging existing code)
13. Inline functions guaranteed to hint the compiler (and without ugly g 
names)
14. snprintf (without using non-std g one)
15. bool (without using non-std g named one - shorter and more readable, 
and can use "true" and "false" instead of non-std TRUE and FALSE macros, 
which is same as most other C-ish langs)
16. Empty macro arguments (might be useful for avoiding to break code by 
changing a function out for a function-like macro without arguments).
17. VA_COPY (sometimes useful when passing around va_lists)

So there's 17 reasons to allow using C99 (not including mentioned loop 
counter thingie), of which I'm sure you'll agree at least a handful 
could be well used in Geany. And yeah G* provides wrappers for some of 
them, but why would we want to use non-standard G* wrappers rather than 
standard C unless we had to?

Think of new contributors who haven't used C since college (which likely 
could've been C99 at that point :), when they want to make changes to 
Geany they not only have to learn all of the G*-isms and follow our own 
style rules, but also code to a > 20 year old obsolete (twice over) 
language standard.

>> BTW, what originally inspired me to send this message was that many many
>> PRs have this comment attached to them: "no //-style comment, we use
>> C89" (paraphrasing). IMO that's a crap reason for blocking a
>> contribution or making someone (who used a perfectly standard C feature)
>> add another commit, squash it into the previous ones and open a new pull
>> request (or however it gets dealt with).
>
> We cant change them ourselves, indeed.  But even if we started to use
> C99 (why?), I'd still would like to keep our style -- which does include
> "no C++-style comments" :)  Why?  Because I like it, because it'd be
> consistent with the rest of the sources, and because it doesn't hurt.
> Yesterday I said "no blank line at start of block": this has nothing to
> do with the language, it's just useless and ugly.
>

I'm not advocating for throwing away our style guide at all, just that 
we should allow some C99 and update our guide accordingly. And FWIW, 
they aren't "C++-style comments", they're "standard C comments" since 
over 10 years, and you're the only person I've heard say they don't 
like/use em :)

And one last note is that we have a giant glob of C++ in our source tree 
that is moving towards C++11[1] (which not surprisingly uses // 
comments), and I'm pretty ruins any chance of compiling Geany on a 
pocket calculator that only supports ancient C89 compilers :)

Let's party like it's 1999!

Cheers,
Matthew Brush

[1] https://groups.google.com/forum/#!topic/scintilla-interest/j5xKrl9cU2g


More information about the Devel mailing list