Expand description
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!")
Modules§
- specification
- What is SBrain?
Structs§
- SBrainVM
- 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.
Functions§
- make_
input_ vec - Create a new Cursor-wrapped input vector which can be used by a machine to read from.
- make_
output_ vec - Create a new Cursor-wrapped output vector which can be used by a machine to write onto.
- simple_
run - Converts the given source code to a SBrain executable and runs it, taking input from stdin and doing output on stdout.
- source_
to_ tape - Transliterate a source code into the corresponding instructions.
- tape_
to_ string - 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.