Hi,
C++20 modules seem to be a good tool to improve compile times and to hide
the implementation details of the libraries.
I've been looking throught the sources of {fmt} library. Looks like the fmt
library approach to C++20 modularization seems to fit Boost quite well.
I performed an analysis for Boost some months ago. Here is what I found out:
- https://anarthal.github.io/cppblog/modules
- https://anarthal.github.io/cppblog/modules2
And here's the discussion we had on this ML:
- https://lists.boost.org/Archives/boost/2024/04/256460.php
- https://lists.boost.org/Archives/boost/2024/04/256597.php
TL;DR:
- Modules help build times when parsing dominates. Clean builds don't
gain as much as you'd expect, but re-builds are much faster.
- Mixing #include and import std causes errors on most
compilers at the moment (although it should not). We were in contact
with MSVC devs and the fix may take time.
- Distributing modules to users so they can consume them with CMake
isn't trivial. In this sense, Boost is different to fmtlib in that a)
most libs are header-only and b) we have a deep dependency tree (where
fmtlib is a single library).
- Some core maintainers (including Peter Dimov and Rene Rivera)
manifested that the amount of work required to enable modules for core
libraries wasn't worth the effort. Together with point 2 above, this
limits the number of libraries that can be modularized to only the
ones without dependencies (e.g. Boost.Decimal).
I think the biggest challenge in distributing Boost as a module is the
CMake consumption part. Without solving this, we won't get anywhere.
I'm happy to hear your opinion.
Regards,
Ruben.