# [`boundvariable`][]
Research notes regarding the [Cult of the Bound Variable][] and affiliates.
[`boundvariable`]: https://git.rcrnstn.net/rcrnstn/cult-of-the-bound-variable
[Cult of the Bound Variable]: http://boundvariable.org
## Universal Machine (UM)
### An puzzling appeal
The association of amateur computational archaeolinguistics, of which I am
a/the member, has heard the call of Professor Emeritus Harry Q. Bovik and
intend to contribute to the [task][] outlined if we can.
As an archaeolinguist my first instinct is to sort through what we know so far
and archive it locally, I hope Professor Bovik doesn't not mind. I also hope
you like [AWK][]. The [`Makefile`][] now downloads/generates the following:
- [`task.txt`][]: Slightly trimmed plain text version of the task.
- [`sha1sums.txt`][]: File hashes extracted from the task.
- [`codex-key.txt`][]: Codex key extracted from the task.
- `codex.umz`: The codex.
- `sandmark.umz`: The benchmark.
- [`sandmark-output.txt`][]: Expected output of the benchmark.
- [`um-spec.txt`][]: Specification for the Universal Machine.
- `um.um`: CMU Reference implementation of the Universal Machine.
These files are all committed but also added to `.gitignore` and removed by
`make clean`.
[tasks]: http://www.boundvariable.org/task.shtml
[AWK]: https://en.wikipedia.org/wiki/AWK
[`Makefile`]: Makefile
[`task.txt`]: task.txt
[`sha1sums.txt`]: sha1sums.txt
[`codex-key.txt`]: codex-key.txt
[`sandmark-output.txt`]: sandmark-output.txt
[`um-spec.txt`]: um-spec.txt
### Mostly Vetted Platterer (MVP)
I have completed the first version of the implementation, see [`um.cpp`][].
It is as pure as I can make it. If someone wants a concise, readable,
programmatic description of the spec this is the version they should look at
(though reading the spec "blind" is a pleasure).
The `um()` function is 45 self-contained lines. 65 lines total in the file, the
difference being `#include`s and a 11 line `main` to deal with the ugliness of
the outside world. Note that guardrails are only present in `main`, if the
scroll itself has bugs there might be [UB][] galore (which is in spec).
I have added a `um` [Makefile][] target, which is a dependency of the default
`all` target:
```sh
make um
# or simply
make
```
[`um.cpp`]: um.cpp
[UB]: https://en.wikipedia.org/wiki/Undefined_behavior
## License
Licensed under the [ISC License][] unless otherwise noted, see the
[`LICENSE`][] file.
[ISC License]: https://choosealicense.com/licenses/isc
[`LICENSE`]: LICENSE