Skip to content

Formalize public API, namespace, and release policy  #4364

@msimberg

Description

@msimberg

I'd like to see us have at most two levels of nesting in namespaces: a top-level hpx and hpx::modulename. I'd even slightly prefer having everything in the public API be directly in hpx to make things easier to find ("I know the include and type that I want, but what namespace is it in?"), but things like std::execution::par make me think that we can have one level of nested namespaces for modules. This leaves the question of what gets to go directly in the top-level namespace? Should everything eventually move to a hpx::modulename namespace? Any functionality that we reimplement from the standard library should be in the same namespace as in the standard library (std replaced with hpx; e.g. hpx::util::tuple should be hpx::tuple). Perhaps aliasing from hpx::modulename to hpx:: for standard library functionality would be a reasonable solution.

On top of this I'd like to see things that we don't want to maintain compatibility for and things that see a lot of churn in hpx::modulename::detail (or hpx::detail). New features should always first go into hpx::modulename::experimental (or hpx::experimental) where they're allowed to change without warning and once stable enough they can move one level up. In short: detail would be for things that are never intended to be public. experimental is for things that should be public eventually but are not stable enough to warrant that.

I'd rather be more conservative with this and have too much in detail/experimental than too much in the public API. It's easy to make things public.

Once there is a concensus on this I think we can start aliasing things into the correct namespaces and once it's time to start thinking about HPX 2 we can remove definitions from the wrong namespaces.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions