conversion of code base to C++
John Ralls
jralls at ceridwen.us
Wed Apr 9 22:12:27 EDT 2025
> On 9 Apr 2025, at 11:41, russ.gorby at gmail.com wrote:
>
> I’ve heard that there is a desire to migrate the GnuCash code base to C++. This is something I was thinking of looking into but don’t want to put in the effort if this is not something that would be accepted by the gatekeepers.
>
> I think the first step is to not refactor the code at all and just do the minimal required to use the C++ linker for linking the executables and to convert the cmake projects to use C++ compiler for all the (mostly C) code. Then once all the code is using the C++ compiler we can start to prioritize which portions of the code should be redesigned to be full-fledged object-oriented projects.
>
> I think this is work I could do w/o impacting any of the real development going on but provide value down the road, but wanted to check-in first
Russ,
It should be so easy.
We’ve been migrating code to C++ in bits and pieces for years. Mostly we convert a file to build with C++ then poke at the internals, replacing containers with STL ones, converting raw loops to STL algos, using lambdas and range-for and constexpr and so on. In a few cases we’ve done full-on rewrites with templates and std::variant and such. There’s still plenty of that sort of work to do, so dive in. Please start with a smallish peripheral-ish class (meaning one that not a lot of other code depends on) so you don’t lose too much time if you need to course-correct.
Be sure to read https://wiki.gnucash.org/wiki/C++ and https://wiki.gnucash.org/wiki/CodingStandard before you start. Keep in mind that in nearly all cases the C++ must be wrapped in C access functions so that the C parts can call the C++ parts, and that no exceptions can escape the C++ boundary. Another thing that you need to be aware of is that most of libgnucash is also mapped to Guile/Scheme and large parts to Python using SWIG. So far we’ve only redone the SWIG bindings for the all-in C++ rewrites: As long as the C API remains then no SWIG changes are needed. The bindings live in the imaginatively-named `bindings` directory tree.
Not all of the C classes have good test coverage so you might want to start off writing some tests.
Are you familiar with the GObject type system?
Regards,
John Ralls
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gnucash.org/pipermail/gnucash-devel/attachments/20250409/57d2bc65/attachment.htm>
More information about the gnucash-devel
mailing list