After a lot of tinkering and whatnot with Sandboys, I have learned a lot. I have STARTED making many languages in my time, but I FINISHED my first one with Sandboys - TodeSplat. Previously, I have been interested in abstract/hypothetical/esoteric languages. With TodeSplat, it was purely a tool to make my life easier. I found it much easier to make something with a purpose, rather than building something "hypothetical" or "pure". And I cut lots of corners, and made things rough around the edges, often finding "90% solutions". But this worked well!
This made me think of Jonathan Blow's language Jai. He talks about the downsides of "big agenda" languages, and he highlights the benefits of 90% solutions. I realised that all my previous language work had been about big agendas and striving for impossible 100% solutions. I looked on Jai with a whole new set of eyes and finally understood what he was going on about! My initial reaction was "I want to try out Jai now!" but was disappointed to see that it wasn't out yet.
I have always tried to make this hypothetical language of mine called "Tode". The main idea is that it is an entirely customizable language. Reflection, reflection, reflection. This stems from my frustration with many programming languages. For context: I first started programming through modding games. I loved tweaking things to how I wanted. I always wished there was a way to "mod" programming languages. Say you didn't like something about it... just "mod" it to change it. The nice thing about modding is that you don't have to invent something totally new. You have a starting point to work on.
I have made so many prototypes of Tode! Each prototype got closer to my dream language. But every one fell down at some hurdle. There was always a barrier where I was trying to force a big agenda or find a 100% solution. Like, "everything is a pattern" or "everything is a list" or "everything is an everything"... Looking back, I wonder what would have happened if I just opted for something like "most things are a pattern". I am sure that I would have found more success. But to be honest, the "big agenda" in all these prototypes causes trouble. The syntax AND semantics of the language ended up rather unusual. And again, I made languages that I had to "wrestle" just to use properly.
"Old Tode" and all these prototypes hold a special place in my heart. It's more like an artistic endeavor than a useful tool. I don't want to change the scope of what Old Tode is. Old Tode IS a big agenda language and always will be (it's more interesting like that). Maybe one day, if I become a genius, I'll be able to marry all its requirements into something that actually works. But for now, I'll put my focus elsewhere and keep learning.
So why don't I try to make a "small agenda" language with some of the same goals as Old Tode. Let's call the new language New Tode (Tode for short). And what are its goals? In no particular order...
- Gets out of your way
But more importantly... HOW are we going to reach those goals?
- 90% solutions
- Try stuff
I want to be able to customise the language on the fly. This can include small tweaks, eg: Changing the characters used in string literals. Or it can include huge overhauls, eg: Changing everything about the language so that it becomes something totally different.
Gets out of your way
I don't want it to feel like you have to wrestle to read or write Tode.
No big agenda! Don't chuck out an idea just because it only works in 90% of cases! Something simple that is good for most cases is better than something complicated that works for all cases.
I think it's good to create stuff, even if I know that I will have to change it all later. This is because I have a lot to learn and I only learn by making stuff! This will help me to avoid over-thinking things too, which could lead me to a big agenda.