pipecircuit 0.0.19

Correct. Robust. Fast. Portable. Pick four.
Documentation

Pipecircuit

HERE BE DRAGONS

You probably shouldn't be using this, yet.

Correct. Robust. Fast. Portable.
Pick four.

A Rust framework for software development that's strict enough to hand to an agent, with performance you'll be proud to ship.

The storage feature provides bounded primary-indexed structure-of-arrays through pipecircuit::storage::warp_table. The default secondary-indexes feature adds declared Roaring-backed secondary indexes, fluent set-algebra queries over opaque selections, and ordered selections ranked by bit-sliced range indexes. Query results resolve to flat generated row references containing id beside the declared row fields; internal stable membership and bitmap representations never enter the public query surface.

The present storage and secondary-query implementation uses alloc. A future feature boundary should let consumers select fixed-capacity and alloc-backed storage/query facilities independently; the current API does not pre-empt that design.

A Pipe names independent inbound and outbound semantic families. An InstalledPipe<Protocol, Transport> installs concrete access to that contract. A local implementation can be a core machine that does not implement Pipe:

use pipecircuit::{Inline, InstalledPipe, Pipe, StateMachine, StepInputOf};

struct Counter(u8);
impl StateMachine for Counter {}
struct Read;
impl StepInputOf<Counter> for Read {
    type Outcome = u8;
    fn step(self, counter: &mut Counter) -> u8 { counter.0 }
}

struct Counting;
impl Pipe for Counting {
    type In<'message> = Read;
    type Out<'message> = u8;
}

let mut installed = InstalledPipe::<Counting, _>::new(Inline::for_pipe(Counter(7)));
assert_eq!(installed.send(Read), 7);

Inline proves one synchronous step returns exactly the pipe's output. Other transports implement TransportTo and TransportFrom independently: submission is a physical fact, not a promise of an immediate semantic response. A foreign program can fulfill the contract without running Pipecircuit.

The 0.0.17 API renames Participant to Pipe, the former installed Pipe to InstalledPipe, and DuplexFitting to DuplexTransport. PipeIn and PipeOut select directional codec families. Inline::new retains the direct machine-as-contract form; Inline::for_pipe selects a separate contract.