Skip to content

Releases: microsoft/proxy

Proxy 3.4.0 – Forward-compatibility release 🚀

12 Jun 03:26
Compare
Choose a tag to compare

3.4.0 adds no new APIs, but it paves the way for Proxy 4 and later majors.

What’s inside

  • Forward-compatibility scaffolding

    • Public headers now live in a versioned inline namespace (pro::v3).
    • Every macro has a major-qualified alias (e.g. PRO3_DEF_MEM_DISPATCH).
    • Lets two majors coexist in one translation unit without ODR violations.
    • Idea by @SidneyCogdill, implemented by @SidneyCogdill and @mingxwa.
  • Toolchain fix

    • Resolved a build failure on Clang 20 — thanks @iKoznov.

Upgrading

  1. Treat 3.4.0 like any other 3.x patch/minor update; no code changes required.

  2. After Proxy 4 ships, migrate module-by-module:

    #include <proxy/v3/proxy.h>  // current
    #include <proxy/v4/proxy.h>  // new
    
    pro::v3::foo();  // existing code
    pro::v4::foo();  // migrated code
  3. When every target depends only on v4, drop v3 and remove pro::v3:: qualifiers.

See the updated FAQ ("How do I upgrade Proxy in a large codebase?") for details.

Full changelog: 3.3.0...3.4.0

Proxy 3.3.0 Release

20 Mar 04:35
02a7c59
Compare
Choose a tag to compare

New Features 🌟

Quality Improvements 🔬

  • Improved diagnostics by reducing constraints by @mingxwa in #262. Thanks to @SidneyCogdill for the great idea!
  • Allowed creating proxy from a null pointer by @mingxwa in #260
  • Prefered static operator() if available by @mingxwa in #267
  • Constrained proxy with facade by @mingxwa in #263
  • Switched lifetime convention to standard dispatch model by @mingxwa in #269
  • Aligned behavior of direct and indirect proxy_invoke with rvalue reference by @mingxwa in #271

Toolchain Updates 🛠️

MSVC on Windows GCC on Ubuntu Clang on Ubuntu Apple Clang on macOS NVIDIA HPC on Ubuntu
Indirect invocation on small objects via proxy vs. virtual functions (shared ownership) 🟢proxy is about 327.6% faster 🟢proxy is about 83.2% faster 🟢proxy is about 46.1% faster 🟢proxy is about 26.8% faster 🟢proxy is about 75.5% faster
Indirect invocation on large objects via proxy vs. virtual functions (shared ownership) 🟢proxy is about 165.3% faster 🟢proxy is about 28.4% faster 🟢proxy is about 20.8% faster 🔴proxy is about 5.1% slower 🟢proxy is about 8.6% faster
Basic lifetime management for small objects with proxy (shared ownership) vs. std::shared_ptr (both without memory pool) 🟢proxy is about 11.8% faster 🟢proxy is about 10.8% faster 🟢proxy is about 8.5% faster 🟢proxy is about 37.5% faster 🟢proxy is about 8.8% faster
Basic lifetime management for small objects with proxy (shared ownership) vs. std::shared_ptr (both with memory pool) 🟢proxy is about 5.7% faster 🟡proxy is about 4.0% faster 🟢proxy is about 21.5% faster 🟢proxy is about 30.5% faster 🟡proxy is about 1.6% faster
Basic lifetime management for large objects with proxy (shared ownership) vs. std::shared_ptr (both without memory pool) 🟢proxy is about 21.1% faster 🟢proxy is about 6.0% faster 🟡proxy is about 0.4% slower 🟢proxy is about 48.9% faster 🟢proxy is about 8.7% faster
Basic lifetime management for large objects with proxy (shared ownership) vs. std::shared_ptr (both with memory pool) 🟢proxy is about 17.7% faster 🟢proxy is about 11.2% faster 🟢proxy is about 29.1% faster 🟢proxy is about 10.5% faster 🟡proxy is about 4.5% faster
  • Attached environment information to benchmarking report by @mingxwa in #270
  • Revised documentation for 3.3.0 by @mingxwa in #272

Full Changelog: 3.2.1...3.3.0

Proxy 3.2.1 Release

19 Feb 14:19
6412685
Compare
Choose a tag to compare

What's Changed

Full Changelog

3.2.0...3.2.1

Proxy 3.2.0 Release

23 Jan 02:29
f220768
Compare
Choose a tag to compare

What's Changed

New Features

Other Notable

Full Changelog

3.1.0...3.2.0

  • Improve the release pipeline by @tian-lt in #210
  • Update CMakeLists.txt to the latest version by @tian-lt in #211
  • Revise design of conversion_dispatch by @mingxwa in #212
  • Suppress unexpected compiler warnings by @mingxwa in #215
  • Fix ADL for free function accessors by @mingxwa in #220
  • Fix typo in implicit_conversion_dispatch.md by @mingxwa in #216
  • Add support for proxy_view and complementary infrastructure by @mingxwa in #218
  • Add direct support for RTTI by @mingxwa in #221
  • Fix the std::in_place_type_t overload for SFINAE-unsafe facades by @mingxwa in #223
  • Replace macro PRO_DEF_WEAK_DISPATCH with class template weak_dispatch by @mingxwa in #224
  • Simplify proxy_invoke and proxy_reflect by @mingxwa in #226
  • Feature: Support for std::format by @mingxwa in #228
  • Revise spec for version 3.2 by @mingxwa in #231

Proxy 3.1.0 Release

25 Nov 05:35
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog

3.0.0...3.1.0

3.0.0

06 Sep 10:07
e76e4ac
Compare
Choose a tag to compare

Proxy 3.0.0 is Now Available!

Check out the new features in our announcement!

Please find more technical details with the following links:

New Contributors

Full Changelog: 2.0.0...3.0.0

3.0.0-rc1

18 Aug 08:04
c596eac
Compare
Choose a tag to compare
3.0.0-rc1 Pre-release
Pre-release

Proxy 3: Feature Complete

After evolving for around half a year, Proxy 3 is now feature complete, with the latest and greatest design for modern runtime polymorphism in C++. Full documentation will be available with the final release of version 3.0.0 soon. Please stay tuned.

What's Changed

New Contributors

Full Changelog: 2.4.0...3.0.0-rc1

2.4.0

09 May 12:10
51af4a8
Compare
Choose a tag to compare

People want proxy.Fun() syntax. Now done.

Full Changelog: 2.3.2...2.4.0

2.3.2

22 Apr 08:48
aa384eb
Compare
Choose a tag to compare

New API

template <class T, class F>  // freestanding
concept inplace_proxiable_target = proxiable<implementation-defined-pointer<T>, F>;

template <facade F, inplace_proxiable_target<F> T, class... Args>  // freestanding
proxy<F> make_proxy_inplace(Args&&... args)
    noexcept(std::is_nothrow_constructible_v<T, Args...>);

template <facade F, inplace_proxiable_target<F> T, class U, class... Args>  // freestanding
proxy<F> make_proxy_inplace(std::initializer_list<U> il, Args&&... args)
    noexcept(std::is_nothrow_constructible_v<T, std::initializer_list<U>&, Args...>);

template <facade F, class T>  // freestanding
proxy<F> make_proxy_inplace(T&& value)
    noexcept(std::is_nothrow_constructible_v<std::decay_t<T>, T>)
    requires(inplace_proxiable_target<std::decay_t<T>, F>);

The function template make_proxy_inplace overloads allow creation of proxy with no-allocation guarantee, and also support freestanding.

What's Changed

  • Fix regression in GCC 11 by @mingxwa in #90
  • Implement make_proxy_inplace and inplace_proxiable_target with freestanding by @mingxwa in #92

Full Changelog: 2.3.1...2.3.2

2.3.1

16 Apr 11:31
c8f0b6b
Compare
Choose a tag to compare

What's Changed

  • Fix UB of potentially wrong compile-time assumption of transparently replaceable by @mingxwa in #81
  • Improve code generation by @mingxwa in #83
  • Add support for accessing the underlying pointer type via a dispatch by @mingxwa in #85

Full Changelog: 2.3.0...2.3.1