-
Notifications
You must be signed in to change notification settings - Fork 727
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
core: remove vendored lazy_static
on no-std
#2173
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Currently, `no_std` targets use a vendored version of `lazy_static` that uses the `spin` crate's `Once` type, while the `std` target uses the `once_cell` crate's `Lazy` type. This is unfortunate, as the `lazy_static` macro has a different interface from the `Lazy` cell type. This increases the amount of code that differs based on whether or not `std` is enabled. This branch removes the vendored `lazy_static` macro and replaces it with a reimplementation of `once_cell::sync::Lazy` that uses `spin::Once` rather than `once_cell::sync::OnceCell` as the inner "once type". Now, all code can be written against a `Lazy` struct with the same interface, regardless of whether or not `std` is enabled.
Doesn't the |
It does in recent versions. The vendored version used in |
Signed-off-by: Eliza Weisman <eliza@buoyant.io>
Signed-off-by: Eliza Weisman <eliza@buoyant.io>
Signed-off-by: Eliza Weisman <eliza@buoyant.io>
davidbarsky
approved these changes
Jun 22, 2022
Signed-off-by: Eliza Weisman <eliza@buoyant.io>
kaffarell
pushed a commit
to kaffarell/tracing
that referenced
this pull request
May 22, 2024
Currently, `no_std` targets use a vendored version of `lazy_static` that uses the `spin` crate's `Once` type, while the `std` target uses the `once_cell` crate's `Lazy` type. This is unfortunate, as the `lazy_static` macro has a different interface from the `Lazy` cell type. This increases the amount of code that differs based on whether or not `std` is enabled. This branch removes the vendored `lazy_static` macro and replaces it with a reimplementation of `once_cell::sync::Lazy` that uses `spin::Once` rather than `once_cell::sync::OnceCell` as the inner "once type". Now, all code can be written against a `Lazy` struct with the same interface, regardless of whether or not `std` is enabled. Signed-off-by: Eliza Weisman <eliza@buoyant.io>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Motivation
Currently,
no_std
targets use a vendored version oflazy_static
thatuses the
spin
crate'sOnce
type, while thestd
target uses theonce_cell
crate'sLazy
type. This is unfortunate, as thelazy_static
macro has a different interface from theLazy
cell type.This increases the amount of code that differs based on whether or not
std
is enabled.Solution
This branch removes the vendored
lazy_static
macro and replaces itwith a reimplementation of
once_cell::sync::Lazy
that usesspin::Once
rather thanonce_cell::sync::OnceCell
as the inner "oncetype". Now, all code can be written against a
Lazy
struct with thesame interface, regardless of whether or not
std
is enabled.Note that this change is only against
v0.1.x
, since the vendoredlazy_static!
macro has already been removed onmaster
.