Releases: ngcpp/proxy
Proxy 4.1.0 Release
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
invokeandreflect.pro::proxyandpro::proxy_indirect_accessornow exposeinvokeandreflectas hidden friend functions, so dispatch and reflector authors no longer need to qualify their calls.proxy_invokeandproxy_reflectare deprecated in favor of the unqualified forms. (#23) - A clearer facade-composition API. New
add_facade_with_substitutiononbasic_facade_buildersays what it does at the call site, replacing the terseadd_facade<F, true>. (#27) - New optimization hook:
reinterpret_invoke. When the concrete contained pointer type is already known at a call site,reinterpret_invokedispatches 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 preferinvoke. (#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_proxyis now202606L.
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")). LegacyWORKSPACEmode is supported back to Bazel 5.1+. SeeREADME.mdfor 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
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-configmetadata when available. - Existing CMake flows continue to work, so current integrations do not need to change.
-
Correctness and semantics
facadeconstraints are tighter and clearer.ProBasicFacadeand the related builder APIs now validate size, alignment, andconstraint_levelsettings 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_traitsdetection is now stricter, avoiding false positives for arbitrary template instantiations and improvingproxiablebehavior in edge cases such as embeddingproxyin wrapper types likestd::variant.PRO_DEF_FREE_AS_MEM_DISPATCHoverload resolution was fixed after a regression, and coverage was expanded across member, free, and free-as-member dispatch patterns.weak_dispatchandexplicit_conversion_dispatchnow correctly handle reference-returning overloads, fixing an important correctness issue for conversion-heavy facades.strong_compact_ptrwas 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
slimfor fairer comparisons, and six relocation metrics were added. - Documentation wording around
proxyindirection 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,
fmt12.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.hintegration was adjusted to stay compatible withfmt12.x.
- 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
Upgrading
Most users can update to 4.0.2 and rebuild.
-
Repository and docs URLs
- Update repository links from
github.com/microsoft/proxytogithub.com/ngcpp/proxy. - Update documentation links from
microsoft.github.io/proxytongcpp.github.io/proxy.
- Update repository links from
-
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'), withpkg-configmetadata 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_dispatchandexplicit_conversion_dispatch. - If you hit odd participation in
proxyconstructors or assignments with custom pointer-like wrappers, the tightenedptr_traitsand facade constraints in 4.0.2 are designed to make those cases more predictable.
- If your facades or conversions rely on reference-returning overloads, rebuild and rerun tests to pick up the fixes in
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
facadeby @mingxwa in microsoft/proxy#359 - tightenedProBasicFacadeand 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_traitsby @mingxwa in microsoft/proxy#367 - made pointer-trait detection stricter and improvedproxiableedge cases. - Fix overload resolution in
PRO_DEF_FREE_AS_MEM_DISPATCHby @mingxwa in microsoft/proxy#372 - fixed a regression and added broader dispatch coverage. - Simplify the implementation of
strong_compact_ptrby @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
fmt12.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_dispatchandexplicit_conversion_dispatchin 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