You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
chore: Attribute::get_enumeration_name returns a reference rather than a copy in order to add Rust binding (#5567)
Differences in copy and move semantics between Rust and C++ mean that
they are generally not very good at passing values across the boundary -
most of the time it is necessary to pass references instead.
#5566 intends to call `Attribute::get_enumeration_name` from Rust. Prior
to these changes, that function returns `std::optional<std::string>`,
which cannot be passed across the boundary (neither `std::optional` nor
`std::string` can be). We can either pass a pointer to a string, or pass
a string contained within a smart pointer.
To avoid the additional memory allocations required for both copying the
`std::string` and placing it in a `unique_ptr`, we choose the former.
However, `std::optional` does not naturally support references, so we
cannot do `std::optional<std::string&>`. Instead we change the return
type to `std::optional<std::reference_wrapper<std::string>>`.
In addition to enabling passing the result of this function to Rust
without allocating additional memory, this also avoids making additional
copies of the string. This is not likely to matter from a performance
perspective, but is still nice!
---
TYPE: NO_HISTORY
DESC: Rust binding for `Attribute::get_enumeration_name`
0 commit comments