Implementations of Rewriting Systems
This page catalogues the implementations of Nova as well as implementation of rewriting systems in general. It's goal is to serve as a hub for rewriting information.
The Nova Family
Vera
Vera is the counter-machine flavor of Nova, meant to be a habitable compilation target for Mira. Originally investigated as a way to try to resolve the complexity and performance issues that plagued Mira at the time. Vera has proven to be more flexible and expressive than expected, especially in the use of event-handling logic.
- The Nova Web Playground, written in Rust, compiled to Wasm
- LVERA, Lua, compiles Vera to lua, loads it at runtime. Recommended for use with Love2D
- jsvera, written in Javascript, compiles Vera to Javscript, loads it at runtime. Intended for use on web pages.
- seikaku, written in Elixir, meant as a playground for distributed Nova, experimental
Mira
Mira operates over a bag-of-tuple of tuples. However, these versions of Nova are currently on a bit of a development hiatus, while Vera is shored up. These are currently at speeds where they struggle with natively representing data
- Oroborous, the Python prototype that started it all, stores data in a prefix tree, which runs too slowly for video game logic at scale, but is quite flexible.
- LunarNova, a Lua implementation of Mira, has some slight semantic differences from Oroborous.
- nova-zig, an implementation in Zig
- Yarnstar, an implementation in Elm. Built with an online web editor for creating hybrid interactive fiction games.
Other Systems
Counter / Register Machines
Rewriting systems in this category operate against a serious of labelled counters or registers. Each counter can hold
FRACTRAN
FRACTRAN is a computing system designed by John Conway. It uses the properties of multiplication, division, and prime factorization to encode a register machine and operations upon it. Devine Lu Linvega provided the following human friendly front end to FRACTRAN:
:: flour sugar apples > apple-cake :: apples oranges cherries > fruit-salad :: fruit-salad apple-cake > fruit-cake sugar oranges apples cherries flour apples
- FRACTRAN on this wiki.
- Devine's write up on FRACTRAN
Tote
Tote is counter-machine programming without text, perhaps the first example of visual programming that doesn't lose expressive power over its text-based counterparts. Built by Devine Lu Linvega in uxn.
Grimoire/Recipe Book
Grimoire/Recipe Book are a remixes of the ideas in Vera to make the parsing a bit more straightforward.
- Recipe Book source code
- work in progress Choose Your Own Adventure written using Grimoire
- source and demo of using Grimoire
Cups
Cups is an implementation of an 8 instruction counter machine. It features the ability to add ports which can be triggered by the inc, cpy, or mov instructions.
- Source code of Cups. Recommended to use a LuaJIT / Lua 5.1 environment.
- Example compiling Vera to Cups.