I think programming languages and how they’re implemented is hugely interesting. Especially when it comes to declarative/functional vs imperative.
There’s some kind of deeper truthiness to the interdependence between them: you can’t have a declarative language without an imperative mechanism under the hood or nothing will happen; you can write imperatively without declarativeness but your code reliability can be hugely better when declarative/functional mechanisms are used to enforce constraints and correctness. They need each other.
Anyway, getting to the point, I’ve enjoyed - and continue to enjoy - learning how programming languages are implemented for the past few years. Back when I was studying for my masters in Computer Science with Electrical Engineering I had no idea that languages might be my thing. Then, I think I had a need to understand things at a broad level - from electrons to algorithms. Now, perhaps I’ve finally narrowed myself down to something? We’ll see.
Between university and a couple years ago, though, there’s a Bermuda Triangle of nothingness and lostness. I came to understand that I’ve suffered from a fair degree of depression for a long time, up until recently. In my mid to late teens (the 90s) I was prolific in my programming creativity, writing reams of x86 assembly as a one-day demo-scene hopeful. However, after university my creativity went through exponential decay until I found myself seriously believing that programming really wasn’t my thing and I should look around for a new “career path.” That’s one sentence but describes half a life of burn out and real depression.
That started turning around about the time I started really noticing how each programming language has it’s own culture around it and I saw how artistically the Ruby community expresses itself in code and visual design. I started looking more closely at languages and over the past three years have begun to regrow the parts of me that loves programming. Realizing that I myself am not much of a computer scientist or an engineer, but primarily a code artist, has been huge to rediscovering my creativity. Thanks Ruby! (◕‿◕)♡
Wait, I’m getting off the point again. I enjoy programming languages, but I really don’t know much about how they’re implemented. The best way to learn is doing, right? So here’s my plan: I’m going to build a language from the ground up and document my process with my ignorance, failures and dead ends while refusing to give up! I’m not going to try to be innovative or clever, just get something to work.
My starting point will be a by-now classically unimaginative yet obligatory Lisp, mostly because I assume I can parse S-expressions without learning everything there is to know about parsers up front, because I should get something basically powerful right up front and because, really, what else could I reasonably do?
With that in mind, here’s my list of goals:
I have no idea how this is going to go! Probably I’ll quietly rewrite the goals half way through. If you’re interested, follow along, point out problems, pitfalls, errors, make suggestions.