Releases: microsoft/proxy
Proxy 3.1.0 Release
What's Changed
- Added macro
PRO_DEF_FREE_AS_MEM_DISPATCH
to facilitate authoring a dispatch type of a free function, while providing accessibility through a member function. - Improved accessibility for reflection. Specifically,
- Added support for "accessors" in a custom reflector type. See function template
proxy_reflect
for more details. - Added support for "indirect" reflections, similar to conventions. See alias template
basic_facade_builder::add_reflection
for more details. - Added the named requirements ProReflection.
- Added support for "accessors" in a custom reflector type. See function template
- Improved code generation in non-optimized builds to facilitate debugging. Specifically,
- Added assertions against null pointers in
proxy::proxy()
,proxy_invoke()
, andproxy_reflect()
. - Added guidance to encourage compilers to generate code for accessibility, even if they are not used in a binary (see #200 and #202 for more details).
- Relaxed the named requirements ProAccessible to facilitate implementation of the debugging facilities.
- Added assertions against null pointers in
- Added benchmarks for the library. See Analyzing the Performance of the “Proxy” Library for more details.
- Added support for the NVIDIA HPC compiler as per @pedronahum's feedback. Specifically,
- Fixed unit tests to enable compilation with the NVIDIA HPC compiler.
- Added a new validation pipeline to ensure it won't regress.
- Updated README accordingly.
- Fixed unit tests when building with clang-cl on Windows as per @frederick-vs-ja's feedback.
- Improved documentation of some facilities. Specifically,
- Aligned wording of
allocate_proxy()
andmake_proxy_inplace()
with P3401R0. - Fixed typo in
basic_facade_builder::add_convention
by @ggqshr in #190. - Improved wording for
PRO_DEF_WEAK_DISPATCH
as per @Shuenhoy's feedback.
- Aligned wording of
- Revised the semantics of
proxy_invoke()
andproxy_reflect()
. - Improved pipeline infrastructure to facilitate engineering. Specifically,
- Enabled automated benchmarking for CI builds.
- Updated macOS image version to 15.
- Updated Ubuntu image version to 24.04.
- Improved release pipeline to generate a
proxy-{version}.tgz
package to facilitate consumption.
- Updated the value of feature test macro __msft_lib_proxy to
202410L
.
New Contributors
Full Changelog
- Fix broken link by @mingxwa in #161
- Update wording for allocate_proxy and make_proxy_inplace by @mingxwa in #163
- Fix documentation format by @mingxwa in #166
- Reduce semantics of
proxy_invoke
by @mingxwa in #167 - Update Ubuntu pipeline image by @mingxwa in #168
- Add benchmarks by @mingxwa in #169
- Resolve warnings in unit tests by @mingxwa in #173
- Pump library version by @mingxwa in #172
- Add assertion for
proxy_invoke()
andproxy_reflect()
by @mingxwa in #175 - [Build] Update macOS to 15 by @mingxwa in #176
- Improve benchmarking command line by @mingxwa in #177
- Force enable EBO on MSBuild when building with clang-cl by @mingxwa in #179
- Resolve build issues for NVHPC by @mingxwa in #182
- Generate benchmarking report by @mingxwa in #181
- Stabilize benchmarking report by @mingxwa in #183
- Implement
PRO_DEF_FREE_AS_MEM_DISPATCH
by @mingxwa in #189 - Update add_convention.md by @ggqshr in #190
- Implement accessibility support for reflection by @mingxwa in #191
- Add pipeline for NVHPC by @mingxwa in #197
- Improve accessibility in debugging by @mingxwa in #200
- Refactor unit tests by @mingxwa in #201
- Improve accessibility in debugging for free functions by @mingxwa in #202
- Improve release pipeline by @mingxwa in #203
- Improve wording for PRO_DEF_WEAK_DISPATCH by @mingxwa in #204
- Fix release pipeline by @mingxwa in #205
- Fix NVIDIA trade name by @mingxwa in #206
3.0.0
Proxy 3.0.0 is Now Available!
Check out the new features in our announcement!
Please find more technical details with the following links:
- API Reference: https://microsoft.github.io/proxy/docs/specifications.html
- Frequently Asked Questions: https://microsoft.github.io/proxy/docs/faq.html
New Contributors
- @frederick-vs-ja made their first contribution in #59
- @alvarogalloc made their first contribution in #133
Full Changelog: 2.0.0...3.0.0
3.0.0-rc1
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
- Fix helper macros for multiple signatures by @mingxwa in #96
- Fix UB in in-place construction by @mingxwa in #99
- Fix GCC pipeline by @mingxwa in #101
- Improve facade infrastructure by @mingxwa in #102
- Improve invocation APIs and facilities to define an operator dispatch by @mingxwa in #106
- Simulate overload resolution in macros by @mingxwa in #110
- Implement pointer-to-member support by @mingxwa in #111
- Refactoring: Improve code clarity by @mingxwa in #112
- Fix typo by @mingxwa in #114
- Implement indirection syntax by @mingxwa in #121
- Improve accessibility by @mingxwa in #124
- Move direction semantics from dispatches to conventions by @mingxwa in #125
- Revise semantics of
proxiable_ptr_constraints
by @mingxwa in #127 - Improve API design by @mingxwa in #128
- Make
facade_builder
a class type, rather than a type alias by @mingxwa in #129 - Improve code quality by @mingxwa in #130
- fix referencing non-existent vcpkg website by @alvarogalloc in #133
- Revise
pro::facade_builder::restrict_layout
by @mingxwa in #132 - Refactor implementation of
meta_ptr
by @mingxwa in #139 - Remove some macros by @mingxwa in #136
- Remove redundant macro
___PRO_DEF_BRACKETS_OP_ACCESSOR
by @mingxwa in #144 - Remove redundant semicolon by @mingxwa in #145
- Add feature test macro by @mingxwa in #146
- Add more samples by @mingxwa in #148
- Remove vcpkg.json in samples by @mingxwa in #149
- Run BVT with AppleClang by @mingxwa in #150
- Update Google test version by @mingxwa in #151
- Fix build error by @mingxwa in #153
- Add .gitattributes by @mingxwa in #155
New Contributors
- @alvarogalloc made their first contribution in #133
Full Changelog: 2.4.0...3.0.0-rc1
2.4.0
People want proxy.Fun()
syntax. Now done.
Full Changelog: 2.3.2...2.4.0
2.3.2
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
2.3.0
Moving towards standardization
We have reviewed the general design of the last version of proxy
in the last ISO C++ committee meeting. The committee unanimously agreed that the problem addressed by proxy
is significant and merits resolution. Based on the feedback, there is a strong possibility that proxy
will advance to the next stage of review for the C++26 standardization. Please refer to the latest paper and presentation slides for more details.
In this update, we have resolved some technical comments from the committee and user feedback. Specifically,
- A new API
allocate_proxy
has been added to the library that accepts any allocator (you can now hookproxy
with any of your memory pool seamlessly!). See #76 - Two new helper macros
PRO_DEF_MEMBER_DISPATCH_WITH_DEFAULT
andPRO_DEF_FREE_DISPATCH_WITH_DEFAULT
are added.proxy
can now be aware of the default implementation of a dispatch and optimize code generation. See #79 - In the definition of a facade or dispatch, any
tuple-like
type is now allowed. Although it does not increase much usability, it will precisely match the wording in the paper's next revision. See #76
Full Changelog: 2.2.1...2.3.0
2.2.1
2.2.0
What's Changed
- Add support for
noexcept
by @mingxwa in #62 (Thanks to @psiha's idea #61) - Add
noexcept
for copyability, relocatability and destructibility metadata by @mingxwa in #63 - Update README.md and replaced std::popcount() with std::has_single_bit() by @mingxwa in #64
Full Changelog: 2.1.2...2.2.0
2.1.2
What's Changed
- Fix self-move-assignment for
proxy
by @frederick-vs-ja in #59 - Reduce compile-time complexity of combined_dispatch_prototype::overload_types by @mingxwa in #60
New Contributors
- @frederick-vs-ja made their first contribution in #59
Full Changelog: 2.1.1...2.1.2