Replace boilerplate COM interface code gen with macro_rules
#2079
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The
windows
andwindows-sys
crates avoidderive
macros as much as possible as they tend to be very slow at scale. There is however a lot of boilerplate code that could be avoided with selective use of macros, so I am going to start making conservative use ofmacro_rules
to replace large chunks of boilerplate code. I tested the change in this update and could not measure any difference in build time, so I think this is a good first step in reducing code gen and overall crate size.The new
interface_hierarchy
macro stamps out most of theFrom
implementations for COM and WinRT types that can often have large interface hierarchies. For example,ID3D12Device9
derives from 11 other interfaces leading to 33From
implementations that can be generated by theinterface_hierarchy
macro far more concisely.windows-rs/crates/libs/windows/src/core/mod.rs
Lines 101 to 123 in 6ed9da4