[mapserver-dev] Modernizing code base: C99 and maybe C++ ?

Jeff McKenna jmckenna at gatewaygeomatics.com
Wed Nov 27 06:26:06 PST 2019


Hi Even,

I believe we can now safely drop the C89 requirement from our codebase; 
I spent quite an effort (an entire year of alpha builds) to move to a 
C++11 supported compiler for MS4W builds on Windows (VisualStudio 2017). 
  As MS4W version 4 embeds both Python3 and PHP7, plus of course GDAL 
changed to C++11 at version 2.3.0, and PROJ 5 as well, it was mandatory 
for MS4W to upgrade compilers.

I don't miss having to move variable declarations to the top of 
MapServer/MapCache functions, to compile successfully, ha).

+1

-jeff




On 2019-11-26 7:43 PM, Even Rouault wrote:
> Hi,
> 
> the kind of topics that is always controversial, but I do think this is a
> matter of survival for the project. I can write C89 code for sure, but which
> bad thing did I do to still be obliged to do it :-) ? Should new contributors
> be constrained by that... 2020 is just in a few days :-)
> 
> Do we have a strong reason to stay with C89 for our .c files ? Not being able
> to use for loop initial declarations ( that is "for( int i = 0; i < ... ; ++)"
> ) is the example of something really annoying. Or being able to put
> declarations in the middle of a function instead of putting them at the
> beginning of it. This makes code harder to read, maintain and more error prone
> because of potential accidental reuse of variables that shouldn't.
> 
> All gcc and clang compilers from the last 10 years support C99. Regarding
> MSVC, MSVC >= 2015 has decent enough support of it. Do we need to support
> older MSVC versions ? I don't think so. Neither current GDAL nor PROJ can
> built with older versions
> 
> For the record, PROJ requires C99 for its few remaining .c files (and C++11
> for .cpp. So does GDAL)
> 
> Next topic would be a
> 
> for i in *.c; do mv $i "`basename $i .c`.cpp"; done
> 
> Well, maybe not like that, because I'm expecting a ton of warnings. But more
> on a case by case basis where someone needs to do non-trivial changes in part
> of the code.
> 
> Being constrained by C deeply sucks honesty. Apart from the Linux kernel which
> still resists for good reasons, I can't think of a single one for MapServer.
> 
> The main point where C sucks is string manipulation, and MapServer does a ton
> of it. Being able to use std::string would be such a relief.
> 
> Ah for the record, we do have C++ in the code base: mapogr.cpp and the agg
> renderer.
> 
> Even
> 



More information about the mapserver-dev mailing list