Inspired by Lispkit, build your own Forth from scratch.
- Learn what Forth is by building a pixel library and turtle graphics in gforth
- Write a console Pixel library using Unicode Braille characters
- Use this to do turtle graphics
- Make register-based "hardware" (VM in Forth) and assembler
- Use the assembler to build a kernel (and boot image)
- Rewrite the VM in C and abandon gforth
- TODO: Bootstrap the rest of the language
- TODO: Port pixel library
- TODO: Port turtle graphics (using fixed point)
- TODO: Port kernel itself
- TODO: Achieve meta-circularity! That is, build the kernel using gforth, then use that kernel to build a new (identical for now) kernel. Iterate.
- TODO: Re-write kernel in more natural Forth syntax
- TODO: Build an inner interpreter and replace calls
- TODO: Experiment with direct/indirect threading
- TODO: Experiment with using the return stack for locals and loop counters
- TODO: Implement remaining Forth control structures
- TODO: Explain
does>in the context of direct/indirect threading - TODO: Discuss/implement token threading
- TODO: Discuss separate headers (e.g. fall-through definitions, save memory, ...)
- TODO: Discuss separate host/target (like Brief)
- TODO: Make more new "hardware" - a stack machine this time
- TODO: Port our Forth to this - see how the inner interpreter goes away
- TODO: Use block-style disk I/O
- TODO: Move to a colorForth style variant (less syntax, no immediate words, etc.)
- TODO: Build a block editor and stop using Vim
- TODO: We've now bootstrapped a whole "OS" for ourselves!
- TODO: Discuss non-standard ideas:
- Quotations (
[:...:]), combinators, (Factor, Joy, Brief, ...) ifas a combinator- Recursion as only control flow
- Quotations (
- TODO: Discuss other execution models (e.g. stack/continuation, XY, Brief, ...)
- TODO: More ideas
- VT100 library
- Snake game
- Tetris game
- Discuss optimizing compilation