pub struct ControlSet {
pub name: String,
pub binding: String,
/* private fields */
}Expand description
Polydat write node: submit an f64 write against the named control via the
session root’s walk-up. Returns 1 if dispatched, 0 if not — either no
session root is installed (outside a running scenario / pure-kernel test)
or the control already reads exactly the requested value (idempotent
writes are elided; see the fixpoint check in the body).
Signature: control_set(name: const str, value: f64) -> u64. Authored
via #[polydat::polydat_node] (SRD-80b).
Writes are non-blocking — the node spawns a tokio task that calls
nmbrs_metrics::controls::ErasedControl::set_f64 and does not await it
(awaiting would deadlock the single-threaded runtime). The control
layer’s confirmed-apply still runs in the background; failures log but do
not stall the issuing fiber. SRD 23 §“Mutation entry points →
GK-driven feedback loops”.
Purity is SideChannel(Other): the write is an observable side effect on
runtime control state, so the node is never const-folded or deduped — it
dispatches on every evaluation.
Fields§
§name: StringThe name argument, as given at construction.
binding: StringThe binding value, computed once at construction.
Implementations§
Source§impl ControlSet
impl ControlSet
Sourcepub fn new(ctx: &BuildContext, name: String) -> Self
pub fn new(ctx: &BuildContext, name: String) -> Self
A control_set node with the given constant arguments.
Trait Implementations§
Source§impl PolydatNode for ControlSet
impl PolydatNode for ControlSet
Source§fn compiled_slot(
&self,
wire_types: &[PortType],
_engine: Engine,
) -> Option<CompiledSlotKit>
fn compiled_slot( &self, wire_types: &[PortType], _engine: Engine, ) -> Option<CompiledSlotKit>
(ptr, len) slot
pairs; vector outputs write into kernel-owned scratch.
Checked by the compiled-kernel builders AFTER
Self::compiled_u64 — pure-scalar nodes never need it.
Default None: the node stays on typed eval. Read moreSource§fn purity(&self) -> Purity
fn purity(&self) -> Purity
runtime_model.md’s D2 axiom. Default:
Purity::Pure. Override to declare an observable
side channel (Purity::SideChannel) or
eval-call-spanning state (Purity::Nondeterministic). Read moreSource§fn scratch_layout(&self) -> Vec<ScratchElem>
fn scratch_layout(&self) -> Vec<ScratchElem>
Self::eval_in. Empty for a node that evaluates over
Values alone, which is every node but a native cone.Source§fn eval_in(
&self,
scratch: &mut [ScratchBuf],
inputs: &[Value],
outputs: &mut [Value],
)
fn eval_in( &self, scratch: &mut [ScratchBuf], inputs: &[Value], outputs: &mut [Value], )
Self::eval with the node’s scratch, which the evaluating
state owns and hands in: storage belongs to the state, never to
the node, which is shared by every state of the program.Source§fn commutativity(&self) -> Commutativity
fn commutativity(&self) -> Commutativity
Source§fn accepts_none_inputs(&self) -> bool
fn accepts_none_inputs(&self) -> bool
Value::None inputs
directly rather than have the kernel propagate None through
it. Default: false — most nodes follow none_semantics.md Rule 1
(None in → None out, no eval invocation). Read moreSource§fn compiled_u64(&self) -> Option<Box<dyn Fn(&[u64], &mut [u64]) + Send + Sync>>
fn compiled_u64(&self) -> Option<Box<dyn Fn(&[u64], &mut [u64]) + Send + Sync>>
Source§fn jit_constants(&self) -> Vec<u64>
fn jit_constants(&self) -> Vec<u64>
Source§fn simd_variant(&self) -> Option<SimdVariant>
fn simd_variant(&self) -> Option<SimdVariant>
Source§fn fusion_subgraph(&self) -> Option<FusionSubgraph<'_>>
fn fusion_subgraph(&self) -> Option<FusionSubgraph<'_>>
PolydatProgram::canonical_hash) walks THROUGH fusion
nodes into this subgraph, so identity is invariant to the
engine mix: jit=off and jit=auto compiles of the same
source hash identically, and resume-skip matching survives
mode changes. Default None: ordinary nodes hash as
themselves.Auto Trait Implementations§
impl Freeze for ControlSet
impl RefUnwindSafe for ControlSet
impl Send for ControlSet
impl Sync for ControlSet
impl Unpin for ControlSet
impl UnsafeUnpin for ControlSet
impl UnwindSafe for ControlSet
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more