Skip to content

Call for Accelerated C++20 Modules Support Across Boost Libraries #1023

Open
@yudaichen

Description

@yudaichen

Dear Boost Community,

As the pioneer of C++ innovation, Boost has consistently led the charge in adopting groundbreaking features before they become standard. While we applaud the initial modularization efforts across several Boost libraries, the current pace of C++20 Modules adoption falls short of what the community needs and expects from this foundational project.


Current Modularization Efforts (Proofs-of-Concept)


The community has made valuable initial progress on modularizing key components:

Header-Only Libraries

  • Boost.Mp11 (proof-of-concept for header-only modularization)
    
    Compiled Libraries
  • Boost.Charconv (proof-of-concept for compiled libraries)
    
    Core Infrastructure
  • Boost.Core (minimal test support subset)
  • Boost.Assert (minimal test support subset)
  • Boost.ThrowException (minimal test support subset)
  • Boost.Config (compatibility headers)
    
    Build System Support
  • Boost.CMake (module installation scripts)
    
    While these efforts are commendable, they represent just the first steps. The C++ ecosystem cannot afford for Boost - the standard-bearer of C++ innovation - to lag in adopting this transformative feature.
    

Why Immediate Scaling is Critical


Compiler Readiness
All major compilers (GCC 15, Clang 16, MSVC) now support C++20 Modules, with import std; already working. The toolchain is ready - where is Boost?

C++ has reached a historical turning point with modularization, and Boost stands at the forefront of this wave.

Community Impact
With virtually every significant C++ project depending on Boost, the lack of comprehensive Modules support creates:

  • Unnecessary build time bottlenecks
  • Missed optimization opportunities
  • Friction in modern codebases
    
    Leadership Responsibility
    Boost has historically bridged the gap between cutting-edge features and standardization (e.g., Filesystem, Coroutines). We must continue this tradition for Modules. Even though MSVC has some issues on the platform, both MSVC and STL are using Boost.Math, which shows the importance and necessity of Boost. And since when did one platform not being able to support something stop Boost from pushing the envelope of compilers and libraries?
    
    CMake Status and Boost's Leadership
    CMake's C++ Modules support is now in a usable state, with no major issues. However, Boost has always held a more prominent leadership position and had a greater influence in the C++ community compared to CMake. Boost should take the lead in driving the adoption of C++20 Modules, rather than waiting for CMake to fully catch up.
    

The Call for Boost 2


The idea of a Boost 2 that assumes C++20 as its starting point has been discussed for years. This would be an opportunity to shed historical baggage and embrace modern C++ fully. Such a bold move would not only align Boost with the current standards but also reinvigorate its position as the innovator in the C++ ecosystem.


Suggested Next Steps



  1. Consider establishing a Modules Task Force
  • This group could coordinate efforts across library maintainers
  • Document best practices for modularization
    
  1. Prioritize high-impact libraries for module conversion
  • Focus on libraries like Boost.Asio, Boost.Compute that would benefit most from modules
  • Create reference implementations for different library types
    
  1. Enhance infrastructure support
  • Expand CMake support for module builds
  • Enhance CI testing for modular configurations
    
  1. Increase community engagement
  • Host regular progress updates
  • Create contribution guidelines for module conversions
    
    The time for proofs-of-concept is over. The C++ community needs production-ready module support across Boost's core libraries. Without Boost leading the way, the entire ecosystem remains stalled. Let's work together to make this happen now.
    


Reddit References:

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