Open mossmaurice opened 1 year ago
@mossmaurice after you left the meeting we basically agreed on the proposal from the description. Everything with an iox/detail/
include and iox::detail
is not public API.
Larger components might have an additional namespace to group structs/classes with a generic name. Currently those components are cli
, log
, error
, units
and concurrent
. These will append the detail
namespace to their second level namespace, e.g. iox::concurrent::detail
.
Additional namespaces should be avoided but can be used when it simplifies the usage or makes the user aware of specific capabilities, like components in iox::concurrent
are thread safe or iox::log::hex
can be used to format the log output in hexadecimal format.
More than two namespaces for classes intended to be used by the end user should be avoided by now but can be re-considered at a later point in time.
This needs to be documented in CONTRIBUTING.md
cc @FerdinandSpitzschnueffler @elfenpiff
Brief feature description
The current distinction between public and private API on namespace and folder level can be confusing for developers.
Detailed information
iox::
namespace, no matter if private or public API. This will allow users an easier transition once a private API has stabilized and will become public.detail
namespace is an implementation detaildetail
(16 hits) andinternal
(91 hits) namespaces are equivalentv3.0
release, only usingdetail
CONTRIBUTING.md#naming-conventions
#include "iox/.."
is part of the public API#include "iox/detail/.."
is part of the private API and can be used at your own risk, e.g. we can use theunique_id
in poshCONTRIBUTING.md#folder-structure
iceoryx_hoofs/Readme.md
iceoryx_hoofs/Readme.md
). As a result we communicate clearer what is public and what is private, a thing where we haven't been super clear before.References