Since @natecull is looking into brutally small targets for compilation, I thought it might be fun to have a dedicated topic. I think this is relevant to Malleable Systems because understanding the reduction of a complex program to a set of small primitives is part of understanding the foundation of the computation necessary.
This is something that I’ve spent quite some time into last year, and I’ve found a couple of useful links:
Philip J. Koopman’s Stack Computers: the new wave goes over the various stack machine designs at the time. The NOVIX is especially of interest. It makes use of bit in the opcode to encode the various behavior of a stack machine, this is also what the J1 did.
Kragen’s Archival with a universal virtual computer talks about using small move machines for data preservation.
- Fractran, Conway’s OISC register machine using prime encoding. where the only opcode is MUL, and each cells are a fraction.
- Subleq, OISC that subtracts the contents at address
afrom the contents at addressb, stores the result at addressb, and then, if the result is not positive, jumps to addressc. - Brainfuck, 9 opcodes turing machine.
- Chifir, register machine, 15 opcodes, designed to host smalltalk-72
- Uxn, concat stack machine, 32 opcodes, local thread.
- CHIP-8, an education register machine, 36 opcodes, graphics.
- SECD Machine, abstract machine for functional programming, 4 stacks, 10 opcodes, local thread.
- Warren Machine, abstract machine for logic programming.
The scheme we described in this essay is but one proposal, and is in no way, shape, or form a complete and definitive technical solution to the challenging and underexplored problem of ensuring the future of our digital heritage.