SBrain, or Semantic Brain, is a set of extensions to the famous language by Urban Müller designed to make it more amenable to genetic programming. Additions include a stack, a general- purpose register, and useful bitwise operations.
This crate provides an implementation of the SBrain specification designed to be used for
genetic programming. See the
specification pseudomodule for the complete specification.
Here's a quick example:
let program = source_to_tape(",[.,]"); let mut input = make_input_vec(b"Hello, world!"); let mut output = make_output_vec(); SBrainVM::new(Some(&mut input), Some(&mut output), &program) .expect("Could not build machine") .run(Some(1000)).expect("I/O failed"); let output = output.into_inner(); assert_eq!(&output, b"Hello, world!")
What is SBrain?
A virtual machine modelling the SBrain Turing machine. This machine implements the specification relatively strictly, providing exactly 2^16 (65536) data and instruction cells. Thus, all pointers are 16 bits and all data is 8 bits. The main deviation from the minimum specification is the jump stack, which is indefinitely expandable.
Create a new Cursor-wrapped input vector which can be used by a machine to read from.
Create a new Cursor-wrapped output vector which can be used by a machine to write onto.
Converts the given source code to a SBrain executable and runs it, taking input from stdin and doing output on stdout.
Transliterate a source code into the corresponding instructions.
Convert a tape of MData cells into Unicode chars. Invalid chars are excluded, which could have some unintended side effects for genesis based on string comparisons.
The type of a pointer to a cell.
The type of a data cell