commit a0069d7818ac8b212b3e02e37b630c74e9976cd4
parent 172edf05d1be265aa789ef7844bf6a8f7d09090d
Author: lash <dev@holbrook.no>
Date: Sat, 1 Apr 2023 15:33:35 +0100
Add readme
Diffstat:
A | README.md | | | 34 | ++++++++++++++++++++++++++++++++++ |
1 file changed, 34 insertions(+), 0 deletions(-)
diff --git a/README.md b/README.md
@@ -0,0 +1,34 @@
+# festive: A Constrained Size Output Virtual Machine
+
+An attempt at defining a small VM to create a stack machine for size-constrained clients and servers.
+
+Original motivation was to create a simple templating renderer for USSD clients, combined with an agnostic data-retrieval reference that may conceal any level of complexity.
+
+
+## Opcodes
+
+The VM defines the following opcode symbols:
+
+* `BACK` - Return to the previous execution frame (will fail if at top frame).
+* `CATCH <symbol> <signal>` - Jump to symbol if signal is set (see `signal` below).
+* `CROAK <signal>` - Clear state and restart execution from tip if signal is set (see `signal` below).
+* `LOAD <symbol> <size>` - Execute the code symbol `symbol` and cache the data, constrained to the given `size`.
+* `RELOAD <symbol>` - Execute a code symbol already loaded by `LOAD` and cache the data, constrained to the given `size`.
+* `MAP <symbol>` - Expose a code symbol previously loaded by `LOAD`. Roughly corresponds to the `global` directive in Python.
+* `MOVE <symbol>` - Create a new execution frame, invalidating all previous `MAP` calls.
+
+
+## Rendering
+
+The fixed-size output is generated using a templating language, and a combination of one or more _max size_ properties, and an optional _sink_ property that will attempt to consume all remaining capacity of the rendered template.
+
+For example, in this example
+
+- `maxOutputSize` is 256 bytes long.
+- `template` is 120 bytes long.
+- param `one` has max size 10 but uses 5.
+- param `two` has max size 20 but uses 12.
+- param `three` is a _sink_.
+
+The renderer may use up to `256 - 120 - 5 - 12 = 119` bytes from the _sink_ when rendering the output.
+