Jimmy Miller
~/Documents/Code/projects/coil-experiments main
❯ cat tests/brainfuck/hello.bf
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.
<<+++++++++++++++.>.+++.------.--------.>+.>.
~/Documents/Code/projects/coil-experiments main
❯ coil run tests/brainfuck/hello.bf --use experiments.brainfuck.lang
Hello World!
The metaprogram here overrides the reader, making it so that bf is completely valid syntax in our language. The resulting program is all coil. No runtime component at all.
I have taken this way further than bf. I made a C metaprogram. Took all of doom, and now doom works in my language. No C at runtime. Only coil. Hopefully soon I'll have some demos to share for all of the amazing things you can do with metaprograms.Joshua Horowitz
08/31/2026, 2:23 AMcoil run tests/brainfuck/hello.bf --use experiments.brainfuck.lang
different from
cat tests/brainfuck/hello.bf | coil run convert-bf-to-coil | coil run --from-std-in
?
That is, what makes “metaprogramming” here different from “compiling” (or, if you prefer, “transpiling”)?Jimmy Miller
Joshua Horowitz
08/31/2026, 3:53 AMJason Morris
08/31/2026, 6:59 PMJimmy Miller
Jason Morris
08/31/2026, 9:31 PMJimmy Miller
Jason Morris
08/31/2026, 9:37 PMJason Morris
08/31/2026, 9:39 PM