Skip to main content

Static

Struct Static 

Source
pub struct Static<T: Sync> { /* private fields */ }
Expand description

A static variable intended to be initialized before main.

§Expected usage

This type is designed for the “startup is single-threaded” model: it is expected that no other threads access the value until initialization has completed. After that point, the value is treated as initialized and immutable.

§Concurrency

If the value is accessed concurrently while it is still being initialized (for example, from another thread during startup, including when used from a dynamic library), this is not undefined behavior, but this implementation does not wait for initialization to complete: it will panic instead.

If you need concurrent first access to be handled by blocking/spinning rather than panicking, use std::sync::OnceLock or std::sync::LazyLock (when std is available).

§Panics / poisoning

If the initializer panics, the static becomes permanently poisoned: all subsequent accesses will panic, and it cannot be reset.

Trait Implementations§

Source§

impl<T: Sync + Debug> Debug for Static<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: Sync> Deref for Static<T>

Source§

type Target = T

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl<T: Sync + Display> Display for Static<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: Sync> Drop for Static<T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more
Source§

impl<T: Sync> Sync for Static<T>

SAFETY: This is safe because the static variable is either initialized and read-only, poisoned and panicing, or initializing (and will panic if multiple threads try to initialize it at the same time).

Auto Trait Implementations§

§

impl<T> !Freeze for Static<T>

§

impl<T> !RefUnwindSafe for Static<T>

§

impl<T> Send for Static<T>
where T: Send,

§

impl<T> Unpin for Static<T>
where T: Unpin,

§

impl<T> UnsafeUnpin for Static<T>
where T: UnsafeUnpin,

§

impl<T> UnwindSafe for Static<T>
where T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.