pub struct TileProgram {
pub spec: TileSpec,
pub bodies: Vec<Arc<BodySource>>,
pub children: Vec<Arc<PolydatProgram>>,
/* private fields */
}Expand description
The runtime form: the spec, compiled body programs, and parsed streams.
Fields§
§spec: TileSpecThe serialized skeleton.
bodies: Vec<Arc<BodySource>>Each projection body, as the one carrier a for body uses:
its statements, the settings it compiles under, and its
program per engine, built on first use, so construction compiles
no body for an engine that never renders it.
children: Vec<Arc<PolydatProgram>>The body programs for the interpreter, which construction needs: the canonical kernels are built over them, and memoisation runs against those.
Implementations§
Source§impl TileProgram
impl TileProgram
Sourcepub fn from_parts(
spec: TileSpec,
bodies: Vec<Arc<BodySource>>,
) -> Result<Self, String>
pub fn from_parts( spec: TileSpec, bodies: Vec<Arc<BodySource>>, ) -> Result<Self, String>
A program from a skeleton and the bodies its projections run.
The compiler’s path: it lowered the bodies, so it hands them over as they are. Each body carries the settings the parent compiled under, and its program per engine is built when a render on that engine first asks for it.
Sourcepub fn from_json(json: &str) -> Self
pub fn from_json(json: &str) -> Self
A program from a serialized skeleton, whose projection bodies are rebuilt from the source text it carries under the default settings.
The route for a skeleton that reaches the runtime as text — a
host that stored one, a test that wrote one. The compiler’s own
path is Self::from_parts, which hands the bodies over
rather than describing them. A standalone skeleton is a tree of
its own: its bodies share a fresh compile ledger and resource
scope. Self::from_json_for loads one for a kernel’s tree.
Sourcepub fn from_json_for(json: &str, kernel: &dyn Kernel) -> Self
pub fn from_json_for(json: &str, kernel: &dyn Kernel) -> Self
A program from a serialized skeleton, loaded for kernel, the
kernel that renders it: its projection bodies compile in the
kernel’s tree as an inline tile’s bodies do, recording their
programs on the kernel’s CompileLedger
and reaching the host resources through the kernel’s
ResourceScope
(polytile.md §7.1).
Sourcepub fn has_projections(&self) -> bool
pub fn has_projections(&self) -> bool
True when any op re-runs a projection body.
Sourcepub fn render(&self, inputs: &[Value], bodies: &mut BodyKernels) -> String
pub fn render(&self, inputs: &[Value], bodies: &mut BodyKernels) -> String
Render with the node’s wire inputs, the hole values, on the
interpreter, over bodies, the rendering state’s own kernels
for the projection bodies.
Sourcepub fn render_into<W: Write>(
&self,
inputs: &[ValueRef<'_>],
engine: Engine,
bodies: &mut BodyKernels,
out: &mut W,
)
pub fn render_into<W: Write>( &self, inputs: &[ValueRef<'_>], engine: Engine, bodies: &mut BodyKernels, out: &mut W, )
Render into any text sink from borrowed views of the hole
values: a String at P1, a step’s own scratch in a compiled
closure. Every hole is encoded here, from the view straight into
the sink, and a projection’s body runs on engine, the engine
of the kernel rendering, in a kernel the rendering state owns
(bodies) and reuses across renders.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for TileProgram
impl !UnwindSafe for TileProgram
impl Freeze for TileProgram
impl Send for TileProgram
impl Sync for TileProgram
impl Unpin for TileProgram
impl UnsafeUnpin for TileProgram
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