Skip to content

chore: Reorganize impl/ to better reflect architectural boundaries#211

Merged
awforsythe merged 2 commits into
mainfrom
aforsythe/chore/reorganize-impl
Apr 15, 2026
Merged

chore: Reorganize impl/ to better reflect architectural boundaries#211
awforsythe merged 2 commits into
mainfrom
aforsythe/chore/reorganize-impl

Conversation

@awforsythe

@awforsythe awforsythe commented Apr 8, 2026

Copy link
Copy Markdown
Contributor

The SDK doesn't support modularized builds yet (i.e. there's no support for building separate DLLs, and no facility for defining what's public/exported in each module), and this PR doesn't attempt to change that. It simply shuffles around the implementation-layer source code to be a bit better-organized.

We previously had:

  • src/datadog/impl/
    • attribute/
    • core/
      • feature_types/
      • core.hpp
      • context.hpp
      • ...
    • events/
    • features/
      • logging/
      • rum/
      • crash_reporting/
    • json/
    • platform/
    • storage/
    • assert.hpp
    • diagnostics.hpp
    • ...

There's not much rhyme or reason to the way things are nested: several areas of concern that are intrinsic to the core module are kept outside of impl/core/, and the core-vs-features split isn't entirely self-evident.

As of this PR, we now have:

  • src/datadog/impl/
    • core/
      • attribute/
      • events/
      • feature_types/
      • json/
      • platform/
      • storage/
      • util/
        • assert.hpp
        • diagnostics.hpp
        • ...
      • core.hpp
      • context.hpp
      • ...
    • logging/
    • rum/
    • crash_reporting/

This structure more directly captures the actual architectural boundaries, namely:

  • There is a single core module, then a separate module for each feature
  • The core module is self-contained
  • Each feature module depends on the core module and no others

CONTRIBUTING.md (which provides a 10,000-foot overview to orient contributors to the high-level design details of the implementation) is revised to reflect the correct paths, and to mention a few key details that were missing before. Everything else in the diff is purely renames and include-path-fixups.

@awforsythe awforsythe force-pushed the aforsythe/chore/reorganize-impl branch from 14b8d20 to 9f30056 Compare April 8, 2026 17:23
@awforsythe awforsythe changed the base branch from aforsythe/chore/consolidate-python-deps to aforsythe/chore/cpp20-u8path April 8, 2026 17:24
@awforsythe awforsythe force-pushed the aforsythe/chore/reorganize-impl branch from 9f30056 to d2351c5 Compare April 8, 2026 17:40
@awforsythe awforsythe marked this pull request as ready for review April 8, 2026 18:23
@awforsythe awforsythe requested review from a team as code owners April 8, 2026 18:23
fuzzybinary
fuzzybinary previously approved these changes Apr 14, 2026
The SDK doesn't support modularized builds yet _(e.g. there's no support
for building separate DLLs, and no facility for defining what's
public/exported in each module)_, and this PR doesn't attempt to change
that. It simply shuffles around the implementation-layer source code to
be a bit better-organized.

We previously had:

- `src/datadog/impl/`
    - `attribute/`
    - `core/`
        - `feature_types/`
        - `core.hpp`
        - `context.hpp`
        - `...`
    - `events/`
    - `features/`
        - `logging/`
        - `rum/`
        - `crash_reporting/`
    - `json/`
    - `platform/`
    - `storage/`
    - `assert.hpp`
    - `diagnostics.hpp`
    - `...`

There's not much rhyme or reason to the way things are nested: several
areas of concern that are intrinsic to the core module are kept outside
of `impl/core/`, and the core-vs-features split isn't entirely
self-evident.

As of this PR, we now have:

- `src/datadog/impl/`
    - `core/`
        - `attribute/`
        - `events/`
        - `feature_types/`
        - `json/`
        - `platform/`
        - `storage/`
        - `util/`
            - `assert.hpp`
            - `diagnostics.hpp`
            - `...`
        - `core.hpp`
        - `context.hpp`
        - `...`
    - `logging/`
    - `rum/`
    - `crash_reporting/`

This structure more directly captures the actual architectural
boundaries, namely:

- There is a single `core` module, then a separate module for each
  feature
- Each feature module depends on the `core` module and no others

`CONTRIBUTING.md` (which provides a 10,000-foot overview to orient
contributors to the implementation) is revised to reflect the correct
paths, and to mention a few key details that it was missing before.
@awforsythe awforsythe force-pushed the aforsythe/chore/cpp20-u8path branch from 61e059a to e1a6d20 Compare April 14, 2026 21:43
@awforsythe awforsythe force-pushed the aforsythe/chore/reorganize-impl branch from d2351c5 to d72900f Compare April 14, 2026 21:43
Base automatically changed from aforsythe/chore/cpp20-u8path to main April 15, 2026 12:38
@awforsythe awforsythe dismissed fuzzybinary’s stale review April 15, 2026 12:38

The base branch was changed.

@awforsythe awforsythe merged commit 5fd050d into main Apr 15, 2026
18 checks passed
@awforsythe awforsythe deleted the aforsythe/chore/reorganize-impl branch April 15, 2026 12:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants