Skip to content

Switching to C++20 in version 5.8.7: Will it be a problem for anyone? #110

Description

@eao197

After the release of v5.8.6, I am returning to suspended work on adding C++20 coroutine support to SObjectizer-5. I hope to complete my experiments within two months (or so) and want to release this functionality in version 5.8.7.

But there is a small problem: SObjectizer-5.8 was a C++17 project, and support for coroutines requires updating the standard to C++20. So, I see several possibilities here:

  1. SO-5.8 remains a C++17 project. Coroutines support will only be enabled if a user chooses C++20 or newer. This means that part of the code will be covered with #if statements to enable coroutines after C++17. I don't like this approach because it requires extra work and testing.
  2. A new branch, 5.9, will be started with an update to C++. This is a slightly better approach, but it also has some minor drawbacks. Releasing SO-5.9 would require copying and pasting a bunch of documents in the wiki, and I want to avoid that boring work. Also, I have no plans to convert SObjectizer into C++ modules this year, because I still don't think module support is sufficiently mature (in compilers, CMake, Doxygen, and so on). Therefore, I think it's not a good idea to launch branch 5.9 without properly modularizing SObjectizer.
  3. Switch to C++20 in the 5.8 branch, if this doesn't break source code compatibility with code written for SO-5.8. This approach is the simplest for me because it doesn't involve any additional work.

For the moment, I'm using approach №3, but all the experiments are separated into isolated branches and do not affect the main development branch (or the master branch).

If you have concerns about switching to C++20 for version 5.8.7, please let me know. It would be great if you could tell me what approach would be most suitable for your needs.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions