It’s the end of summer, 2021. It’s some time since I have posted anything, mainly because, this year things like music festivals have been allowed to take place in the UK, so I’ve been taking advantage of them instead of sitting in front of my computer writing material for this blog. I’d like to apologise, except I’m not sorry.
Anyway, if you’re interested in any of my current “projects” or future ideas that I might be developing, here’s the full run down. This is more for me to organise my thoughts than anything else, so it’ll probably be quite boring.
When I have been in front of my computer, in the last month or too, I have been slogging through the implementation of the core words for my Forth interpreter. It now passes my adaptation of the core test suite and the source code is tagged blog-1781.
I have several future directions in mind. for this:
- Make a serviceable REPL so you can use it from the command line.
- Expand the number of words it understands to include the rest of the core words and selected other optional word sets.
- Write a C version of the core machine to see if I can get some speed improvements out of it. I have already made a start on this. Progress is recorded in the c-core branch.
- It would also be nice to have a version that will work in an embedded environment e.g. it would be great to have a Raspberry Pi boot directly into a Forth interpreter.
As a teaching aid for the canonical untyped lambda calculus, the lambda calculator is probably already as good as it needs to be. There are a number of avenues which I could pursue though.
- Add types. By adding types, we move towards having a practical computer language. It’s also an interesting exercise in how to do type checking and type inference. There’s a page in the series about lambda calculus I was using that would be a great starting point.
- Add the ability to run a calculation to completion. For the moment, we only have the ability to single step reductions. It would be nice to bet able to run a beta reduction to completion. This is the motivation for my post about signal handling. We need to be able to interrupt a calculation that does not terminate without killing the REPL.
- Build a Turing Machine in the Lambda calculus. The Lambda Calculus is Turing complete and hopefully we have done enough to convince you that it is, but showing that we could build an arbitrary Turing machine in the Lambda Calculus would prove it.
I have an idea to build a lightning simulator, inspired by this Numberphile video. I think I would change things slightly though. Rather than using a maze with walls, I would assign a random resistance to each cell and have it “slow down” the lightning strike. I’d also use a hexagonal grid.
I should probably do a few more of the Armchair Universe simulations, since I spent so much money on acquiring the book.
That’s it for now. Most of the above will probably never get done, but it’s good to have a plan.