Skip to content
Moddable Language
JavaScript CSS HTML
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



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.

So I left it, and carried on going about my usual Sandboys business. But in the back of my head, I kept thinking about what I had learned. Jai just seems like such a nice-to-use language. To me, it seems like it works for you and doesn't get in the way. I like how it seems quite "matter of fact". Data is just data. I know exactly what I'm dealing with. This is in contrast to working with Javascript, where I have been trying to "trick" the Chrome compiler into generating faster code. It feels like I have to "wrestle" it, often doing unintuitive things for performance increases. Jai seems to get out of the way and let you do what you Want to do. (Don't get me wrong though - I love Javascript for so many reasons. But this use was not ideal for it.)

I also love the "#run" feature, where you can run ANY code at compile time. It inspired me to change the way TodeSplat works. I made a function that allowed me to dynamically make and run Javascript when the page loads. And I made it calculate and bake more stuff at load-time. It helped performance!

Old Tode

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.

New Tode

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...

  • Moddable
  • 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.

90% solutions
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.

Try stuff
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.

You can’t perform that action at this time.