Expand description
The blue runtime — one definition of what a blue program runs against.
Before this crate existed, every consumer hand-rolled its own
Interpreter::new() + install_primitives(...) pair — three of them, in
three crates — and they had silently drifted: none of them loaded the Lisp
stdlib. So 6 % 3 lowered correctly to (mod 6 3), mod was genuinely
defined, and the program still died with unbound symbol: mod, because
the definition lived in a stdlib nobody loaded.
That is the duplication tax in its usual shape: the bug is not in any one copy, it is in there being copies. One function now owns the answer.
§Layers
A blue interpreter is built in two layers, and both are required:
- Rust primitives — arithmetic, comparison, list ops, I/O.
- The full tatara stdlib — primitives, higher-order functions
(
map/filter/fold), maps, channels, fibers, type-check, and everything tatara defines in tatara-lisp itself (mod,rem,first,inc,even?, the actor and transducer helpers, …). Loading it is not optional garnish: blue’s own operator lowering depends on it. - blue’s own core (
stdlib) — strings and number conversion, which tatara-lisp does not have in any form. A Ruby-surface language withoutlengthorupcaseis not usable, and the semantics are Ruby’s (characters, not bytes), which is why they are blue’s and not the substrate’s.
Re-exports§
pub use erase::erase_types;pub use inputs::declarations;pub use inputs::install_input_primitives;pub use inputs::Declaration;pub use inputs::InputError;pub use inputs::Inputs;pub use pipeline::parse;pub use pipeline::parse_tree_with_depth;pub use pipeline::parse_with_depth;pub use pipeline::run;pub use pipeline::run_with_inputs;pub use pipeline::Run;pub use pipeline::RunError;pub use stdlib::install_blue_stdlib;
Modules§
- erase
- Type erasure — the step that makes the sliding scale actually slide.
- inputs
- Build inputs — the macro phase’s only channel to the outside world.
- json
- JSON — parse, stringify, and read back — as blue’s own surface.
- pipeline
- The blue pipeline: parse → check → erase → run, in that order, once.
- stdlib
- blue’s string and number core.
- uses
use("name")— how a blue program consumes a bidama.
Functions§
- interpreter
- Build an interpreter with the complete blue runtime installed.
- interpreter_
hostless - The common host-free case.
- lower_
to_ spanned - Lift blue’s emitted forms into what the evaluator eats. The one door.