Plans for 2025
I’d like to work on my own programming language this year. I have a bunch of ideas floating around my head that I’d like to try and I need a small programming language to act as a test bed for experimentation.
The language itself would need to be pretty minimal, just functions, data and modules to start and then take it from there. I’m particularly interested in the problem of incremental compilation because it’s important for fast compile times and type analysis for large code bases.
I think you’ll have a better result if you start with an incremental parser than trying to bolt it on afterwards and would enable languages like Rust and Crystal to have their cake and eat it too. I suspect this would also ease the development of a language server which increasingly seems like a requirement for any new programming language.
The most promising work in this direction that I know of is tree-sitter which uses an incremental GLR parser, and applying this technique to a parser frontend seems promising. There seem to be some problems using tree-sitter to create arbitrary ASTs but I’ll need to revisit it to see if this is still the case.
I’m also quite interesting in PEGs, and in particular LPeg from Lua. In my limited experience it seems quite powerful and usable to incrementally developer a parser for all kind of parsing tasks. Maybe it possible to take some of the ideas from tree-sitter and apply them to PEGs, but I’ll need to dig into the details.
As far as the actual language I’ll develop, I’m considering something Oberon like. I’m a big fan of Niklaus Wirth’s ideas and Oberon is a language that is both simple and proven to be sufficiently capable to develop a simple operating system so it might be a good place to start. I’ve also been interesting in trying to understand the Oberon operating system for some time and this would provide an opportunity to get more familiar with the language itself.
I suspect I’ll do a variant of Oberon that looks more modern, maybe a bit more like Go or Nim. I think the style of Oberon/Pascal/Modula often puts people off because it’s so unfamiliar but if you squint it’s pretty much just Go.
My other main technical goal for the year is to pick up Rust in a more serious way. I don’t think Rust is perfect, but I think it does a lot of things right and I think (like C++) there are lots of interesting projects and things happening in the Rust community. As a contractor I would also prefer to develop expertise in a technology that I could likely find contract work for which excludes a lot of technologies I also like.
The proof of the pudding is in the eating, but I’m hopeful.