[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