Skip to content

Releases: ngcpp/proxy

Proxy 4.1.0 Release

24 Jun 14:56
1c7ca60

Choose a tag to compare

Proxy 4.1.0 is a focused feature-and-ergonomics release. It smooths out the authoring experience, delivers dramatic compile-time speedups, adds a low-level dispatch optimization hook, and broadens portability to freestanding environments and Bazel. All while staying source-compatible with 4.0.x.

What's inside

Ergonomics and API

  • Unqualified invoke and reflect. pro::proxy and pro::proxy_indirect_accessor now expose invoke and reflect as hidden friend functions, so dispatch and reflector authors no longer need to qualify their calls. proxy_invoke and proxy_reflect are deprecated in favor of the unqualified forms. (#23)
  • A clearer facade-composition API. New add_facade_with_substitution on basic_facade_builder says what it does at the call site, replacing the terse add_facade<F, true>. (#27)
  • New optimization hook: reinterpret_invoke. When the concrete contained pointer type is already known at a call site, reinterpret_invoke dispatches directly against that type: no type erasure, no runtime metadata lookup, no virtual call. Reach for it on hot paths or when authoring custom dispatch types and accessors. Ordinary code should still prefer invoke. (#36)
  • Clearer diagnostics. A facade with an ill-formed facade-aware overload now produces a focused, actionable error instead of a cascade of unrelated failures. (#29)
  • The feature-test macro __msft_lib_proxy is now 202606L.

Performance

  • Convention-heavy facades compile dramatically faster: roughly +29% with 10 conventions, +71% with 30, and up to ~8.5× with 200. A special thanks to @Kim-J-Smith for his insights. (#32)

Portability

  • First-class Bazel support. Proxy now integrates with Bazel alongside CMake and Meson. Bzlmod (Bazel 7+) is the recommended path (bazel_dep(name = "proxy", version = "4.1.0")). Legacy WORKSPACE mode is supported back to Bazel 5.1+. See README.md for setup. (#40)
  • Freestanding modules support. Proxy is now validated in freestanding environments, including its C++20 module, with coverage across all three build systems. (#49)
  • Built-in compatibility guards. Proxy emits a clear error on pre-C++20 compilers and actively guards against a known clang-cl miscompile (llvm/llvm-project#143245) that could otherwise silently corrupt pro::proxy. (#50)

Tooling and CI

  • Aligned CMake/Meson build configuration and made doc-example testing reconfigure promptly when docs change. (#39)
  • Added pre-commit hooks, a CONTRIBUTING.md, and a lint CI job. (#41)
  • Stood up automated weekly dependency updates (self-hosted Renovate plus a companion script for CMake/Meson pins). (#43, #46, #47, #48)
  • Refreshed toolchains and dependencies: Clang 22, NVHPC 26.3, Google Benchmark 1.9.5, a Clang 21 regression job, and assorted action/dependency bumps. (#25, #44, #52, #31, #22)
  • Fixed a benchmark bug that also improved the reported numbers. (#26)

Deprecations

Deprecated APIs still compile and work; they emit deprecation warnings.

Deprecated Use instead
proxy_invoke / proxy_reflect unqualified invoke / reflect
add_facade<F, true> add_facade_with_substitution

Upgrading

Most users can update to 4.1.0 and rebuild while public APIs are source-compatible. The deprecated APIs above still compile and work. Migrate to their replacements at your convenience to silence the warnings.

Full Changelog: 4.0.2...4.1.0

Proxy 4.0.2 Release

13 Mar 15:35
bcbe0c7

Choose a tag to compare

Proxy 4.0.2 brings Proxy to its new home at ngcpp/proxy, adds first-class Meson build support, and delivers a focused set of correctness, tooling, and specification improvements.

What's inside

  • A new home for Proxy

    • Proxy has moved from microsoft/proxy to ngcpp/proxy, with a new documentation home at ngcpp.github.io/proxy.
    • Governance and support documents were updated for ngcpp stewardship.
    • Copyright notices now preserve Microsoft's original ownership for 2022-2026 and add ngcpp for ongoing development starting in 2026.
  • Meson joins CMake

    • Proxy now ships Meson build files alongside CMake, making it much easier to consume the library in Meson-based projects.
    • The Meson integration covers header installation, tests, benchmarks, and extracting examples from the docs, with optional pkg-config metadata when available.
    • Existing CMake flows continue to work, so current integrations do not need to change.
  • Correctness and semantics

    • facade constraints are tighter and clearer. ProBasicFacade and the related builder APIs now validate size, alignment, and constraint_level settings more rigorously.
    • Incomplete support for the standard trivial relocation model was removed. Proxy continues to focus on the supported bitwise trivially relocatable direction introduced in 4.0.0.
    • ptr_traits detection is now stricter, avoiding false positives for arbitrary template instantiations and improving proxiable behavior in edge cases such as embedding proxy in wrapper types like std::variant.
    • PRO_DEF_FREE_AS_MEM_DISPATCH overload resolution was fixed after a regression, and coverage was expanded across member, free, and free-as-member dispatch patterns.
    • weak_dispatch and explicit_conversion_dispatch now correctly handle reference-returning overloads, fixing an important correctness issue for conversion-heavy facades.
    • strong_compact_ptr was simplified internally with no intended user-visible behavior change.
  • Benchmarks, docs, and toolchains

    • Benchmarks were reorganized to better reflect real usage: management benchmarks were renamed to creation benchmarks, metrics were grouped into core, comparative, and observational buckets, all facades were switched to slim for fairer comparisons, and six relocation metrics were added.
    • Documentation wording around proxy indirection was updated to match current semantics - indirection is no longer optional.
    • CI and dependency coverage moved forward again: Clang 21, GCC 15, NVHPC 25.11, fmt 12.1.0, Google Benchmark 1.9.4, GoogleTest 1.17.0, and nlohmann-json 3.12.0 are now part of the refreshed toolchain story.
    • The proxy_fmt.h integration was adjusted to stay compatible with fmt 12.x.

Upgrading

Most users can update to 4.0.2 and rebuild.

  • Repository and docs URLs

    • Update repository links from github.com/microsoft/proxy to github.com/ngcpp/proxy.
    • Update documentation links from microsoft.github.io/proxy to ngcpp.github.io/proxy.
  • Build systems

    • Public namespaces and current CMake target names remain unchanged in 4.0.2.
    • Existing CMake integrations continue to work as before.
    • Meson is now supported for header installation, tests, benchmarks, and docs examples. Meson consumers can integrate Proxy through dependency('msft_proxy4'), with pkg-config metadata generated when that tooling is available.
  • Behavioral notes

    • If your facades or conversions rely on reference-returning overloads, rebuild and rerun tests to pick up the fixes in weak_dispatch and explicit_conversion_dispatch.
    • If you hit odd participation in proxy constructors or assignments with custom pointer-like wrappers, the tightened ptr_traits and facade constraints in 4.0.2 are designed to make those cases more predictable.

Acknowledgments

Thank you to everyone who helped move Proxy into its next chapter. A special thanks to @mochaaP for landing Meson support and expanding the project's build-system reach.

What's Changed

  • Improve constraints for facade by @mingxwa in microsoft/proxy#359 - tightened ProBasicFacade and builder validation for layout and constraint settings.
  • Remove support for standard trivial relocation by @mingxwa in microsoft/proxy#365 - removed an incomplete, untested relocation path.
  • Avoid false positive for ptr_traits by @mingxwa in microsoft/proxy#367 - made pointer-trait detection stricter and improved proxiable edge cases.
  • Fix overload resolution in PRO_DEF_FREE_AS_MEM_DISPATCH by @mingxwa in microsoft/proxy#372 - fixed a regression and added broader dispatch coverage.
  • Simplify the implementation of strong_compact_ptr by @mingxwa in microsoft/proxy#368 - reduced internal complexity without changing intended behavior.
  • Fix wording for proxy indirection by @mingxwa in microsoft/proxy#369 - aligned the docs with the current mandatory indirection model.
  • Revise benchmarks by @mingxwa in microsoft/proxy#373 - regrouped metrics, switched facades to slim, and added relocation measurements.
  • Update toolchain by @mingxwa in microsoft/proxy#378 - refreshed compiler coverage and dependency versions, including fmt 12.x compatibility work.
  • build: support meson build system by @mochaaP in microsoft/proxy#375 - added Meson support for building, testing, benchmarking, and docs example extraction.
  • Update branding for migration by @mingxwa in ngcpp/proxy#1 - moved repository branding, links, and governance docs to ngcpp.
  • Update email address for Code of Conduct by @mingxwa in ngcpp/proxy#2 - consolidated contact details around the current support address.
  • Update copyright by @mingxwa in ngcpp/proxy#12 - preserved Microsoft's historical ownership and added ngcpp for ongoing development.
  • Fix weak_dispatch and explicit_conversion_dispatch in reference-returning overloads by @mingxwa in ngcpp/proxy#13 - corrected reference conversion handling and added targeted tests.
  • Update version to 4.0.2 by @mingxwa in ngcpp/proxy#14.

Full changelog: ngcpp/proxy 4.0.1...4.0.2