Skip to main content

JitState

Struct JitState 

Source
pub struct JitState { /* private fields */ }
Expand description

The Tier-2 state of one runtime.

Owned by that runtime’s Tiers; see the module docs for the split between this and the handful of genuinely process-wide items below.

Implementations§

Source§

impl JitState

Source

pub fn install_backend(&self, backend: Arc<dyn JitBackend>)

Attach a JIT compiler to this runtime. Idempotent: the first backend installed wins, later attempts are ignored.

Source

pub fn backend(&self) -> Option<&Arc<dyn JitBackend>>

This runtime’s JIT compiler, or None when no JIT is linked or installed (dispatch then stops at Tier 1).

Source

pub fn get_native_fn(&self, arity_id: u64) -> Option<(*const (), u64)>

Return the compiled native function pointer and its reclamation epoch for arity_id, if native code is currently published.

The caller must keep the returned epoch live (via push_jit_frame) for the entire native call, so code unloading at a stop-the-world safepoint does not free the backing module while it executes.

Source

pub fn store_native_fn(&self, arity_id: u64, ptr: *const (), epoch: u64)

Publish a compiled native function pointer and its reclamation epoch for arity_id. Called by the JIT worker thread after successful compilation.

Stores the epoch before the pointer (release ordering) so that any reader that observes a non-null pointer also observes the matching epoch.

Source

pub fn take_native_epoch(&self, arity_id: u64) -> Option<u64>

Clear the published native pointer for arity_id and return the epoch that was backing it, if any.

Called when a var holding this function is redefined: future dispatches fall back to the interpreter immediately (the pointer is nulled), and the returned epoch is handed to the code cache so the now-superseded module is reclaimed at the next safepoint once no frame is executing it. Also drops the per-arity table entry, keeping the table bounded across a long REPL session of redefinitions.

Source

pub fn stale_native_code(&self, arity_id: u64)

Null any published native code for arity_id (whole-function and OSR entries) and hand the backing epochs to the code cache for reclamation.

Used by cross-defn invalidation and by the var-rebind hook; a no-op when nothing was compiled or no JIT is installed.

Source

pub fn arg_type_profile(&self, arity_id: u64) -> Option<Vec<u8>>

Snapshot the accumulated argument-type profile for arity_id (one bitmask byte per IR parameter), if any calls were profiled.

Source

pub fn record_call( &self, arity_id: u64, ir_func: Arc<IrFunction>, profile_args: &[Value], )

Record a call to arity_id.

Bumps the invocation counter and folds the call’s argument types into the arity’s type profile (profile_args are the positional call arguments matching the IR parameters; for a variadic arity the caller passes only the fixed prefix, leaving the rest-list parameter unprofiled — it is padded with PROFILE_OTHER so it can never be specialized). When the counter crosses jit_threshold for the first time, submits a compilation request to this runtime’s backend.

Called on every Tier-1 IR dispatch; must be cheap. Profiling stops once the compile is queued, so the steady-state cost is one atomic increment, one compare, and one relaxed load.

Source

pub fn record_interp_call(&self, arity_id: u64) -> bool

Record a Tier-0 (tree-walk) call to arity_id.

Returns true exactly when the warm threshold is crossed and no lowering request has been enqueued yet — the caller should snapshot the function and enqueue, then call Self::mark_lower_queued on success. Uses >= so a failed enqueue (full queue) retries on the next call.

Source

pub fn compile_queued(&self, arity_id: u64) -> bool

Whether a JIT compile has been queued (or published) for arity_id. Used by the cold-IR sweep: an arity with an in-flight compile still needs its IR as the deoptimization fallback.

Source

pub fn pins_ir(&self, arity_id: u64) -> bool

Whether the cold-IR sweep must keep arity_id’s IR: native code is published (the IR is its deoptimization fallback) or a compile is in flight (the worker will need it).

Source

pub fn lower_queued(&self, arity_id: u64) -> bool

Whether a background lowering request is already queued for arity_id. Fast skip for the Tier-0 dispatch path.

Source

pub fn mark_lower_queued(&self, arity_id: u64)

Mark that a background lowering request was accepted for arity_id.

Source

pub fn clear_lower_queued(&self, arity_id: u64)

Clear the lowering-queued flag for arity_id, re-arming the dispatch seam’s enqueue. Used by the lowering worker when it abandons an arity after exhausting its rebind-retry budget.

Source

pub fn on_ir_published(&self, arity_id: u64)

Called by the lowering worker when it publishes IR for arity_id.

Restarts the invocation counter so the JIT threshold counts pure Tier-1 calls (and the argument-type profile gets a full window). Deliberately does not drop the JitEntry: lower_queued must stay set, or the Tier-0 path could re-enqueue between publish and the next IR dispatch.

Source

pub fn evict_entry_if_cold(&self, arity_id: u64) -> bool

Drop the JitEntry for arity_id iff it has no published native code and no queued compile. Returns whether it was dropped.

Used by the cold-IR TTL sweep: dropping the entry clears the counters and lower_queued, so an evicted function can re-warm from zero.

Source

pub fn set_bootstrap_watermark(&self, w: u64)

Record the bootstrap/user boundary: every arity id strictly below w was defined before this runtime’s compiler became ready. Called by the runtime builder with crate::interp::arity::next_arity_id().

Source

pub fn is_bootstrap_arity(&self, arity_id: u64) -> bool

Whether arity_id belongs to a bootstrap-era definition (excluded from background lowering).

Source

pub fn is_deopt_result(&self, result: *const Value) -> bool

Whether result is the deopt sentinel returned by a failed entry guard. Always false without a backend: nothing produced native code.

Source

pub fn take_pending_exception(&self) -> Option<Value>

Take (and clear) the thread’s pending exception, if any.

Called by the JIT-native and OSR dispatch seams immediately after native code returns. Returns None when no JIT is installed.

Source

pub fn specialization_allowed(&self, arity_id: u64) -> bool

Whether arity_id may be compiled with type specializations.

Source

pub fn record_deopt(&self, arity_id: u64)

Record an entry-guard deopt for arity_id.

Once the failure count crosses deopt_limit, the specialized code is unpublished (dispatch falls back to Tier 1 immediately), its module is handed to the code cache for reclamation, the arity is banned from re-specialization, and its invocation counter restarts so the generic recompile triggers through the ordinary hot path.

Source

pub fn osr_poll(&self, arity_id: u64, header: u32) -> OsrPoll

Poll for a compiled OSR entry for the loop at header in arity_id.

Source

pub fn osr_request(&self, arity_id: u64, header: u32, ir_func: &IrFunction)

Request OSR compilation for the loop at header in arity_id. Idempotent: only the first request per (arity_id, header) enqueues (and pays for one IrFunction clone); with no JIT installed the entry is marked failed so callers stop polling.

Source

pub fn store_osr_fn( &self, arity_id: u64, header: u32, ptr: *const (), epoch: u64, live_ins: Vec<VarId>, )

Publish a compiled OSR entry. Called by the JIT worker thread.

Source

pub fn mark_osr_failed(&self, arity_id: u64, header: u32)

Record that OSR compilation for (arity_id, header) declined or failed, so interpreters stop polling and the loop stays at Tier 1.

Source

pub fn take_osr_epochs(&self, arity_id: u64) -> Vec<u64>

Drop all OSR entries for arity_id (the owning var was rebound), returning the epochs of published code so the caller can hand them to the code cache for reclamation once no frame executes them.

Source

pub fn stale_osr_code(&self, arity_id: u64)

Drop all OSR entries for arity_id and hand their published epochs to the code cache for reclamation. Used by the cold-IR TTL sweep: OSR-entry code is only reachable from Tier-1 interpretation of the evicted IR, so it is equally cold. A no-op when nothing was compiled or no JIT is installed.

Trait Implementations§

Source§

impl Drop for JitState

Release this runtime’s compiled code when the runtime goes away.

The code cache is process-global (one executable-memory budget, one worker), so nothing else would ever look at these modules again: their only referents were the tables being dropped right here. Staling them hands them to the cache’s reclaim path, which frees each one at the next stop-the-world safepoint at which no thread is executing it — the same live-frame scan that guards redefinition, so a native frame still on some thread’s stack is as safe here as it is there.

Without this, a host that creates and drops runtimes — the case per-runtime tier state exists to support — would leak every module it ever compiled. The CLI, with one runtime for the life of the process, never reaches it.

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

Auto Trait Implementations§

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

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

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. 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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more