A New Journey

29 September, 2026
All pages

So I've been a programmer for a long, long time. And when you have programmed for that long, you tend to collect opinions and preferences about how a programming language should work. Well, should work for you.

Most of my programming in the last decade has been for websites. So, JavaScript and TypeScript, node and React, HTML, CSS... plus a smattering of other things like Java, Kotlin. Most recent C I did was for an Arduino, but I know my C and C++ is rusty. Heck, I last truly used C/C++ to write 16-bit Windows programs! And one other thing I've done a fair bit of is shell scripting. Which means bash, for those familiar with Unix-like command lines.

Don't get me wrong: Bash is a very capable shell environment, no doubt about it. But I do find it is has features that I think are struggling to pass the test of time. Alternatives such as zsh (which Apple changed their default shell to a few versions of MacOS ago) feel like tinkering around the edges. I'm not impressed with zsh. Or other shells that seem to be "bash plus". Even if that's not what they're trying to do.

I also feel annoyed by the sharp edges of bash. However, bash has been around a very long time, and I've been using it for many decades, too. You'd think I know it well, right? Maybe. They say "familiarity breeds contempt" and one of the things I have always disliked is the way variable substitution works, with special notation in otherwise normal text. Many languages have this notation, though, and a lot of programmers love it.

I don't.

It's a whole separate mini-language inside what would otherwise be literal strings. (Similar reason I am not a fan of regular expressions, but that's definitely a topic for another time!) This was the impetus for creating a shell scripting language that doesn't need that and doesn't have. And along the way, I found a whole lot of other things to re-think. And I've been enjoying it.

The goal here is to chronicle my efforts at creating a Unix shell that is also a fully functional general programming language. Usable for adhoc scripting or web pages. And an interpreted language. Not compiled. Not transpiled to another. Not translated to an internal VM. Straightforward lexing and parsing, then the parse tree is walked to run the program.

You can tell I've been thinking about this for quite some time!