Website of Tom Pace, PhD

Why does the world need yet another programming language?

Posted by Tom Pace on 2022-12-31

Strictly speaking, it doesn't. What it needs is a better open-source CAD-like program for generating figures in technical publications.

One of the key features for this program is that the input files should be in a human-readable text format, to allow for proper version control. But, a file with large amounts of duplicated data, like SVG for example, isn't ultimately very human-readable. YAML is a bit closer, but it has some limitations. Sometimes I want to be able to create the graphical entities programmatically. For example, I want to use a loop and do calculations based on the positions of other entities. I also want to be able to define higher-level entities that abstract groups of lower-level ones. All this means the input files are written in some programming language. And none of the existing languages quite meet my needs for this purpose.

So that's why I ended up trying to create a new one. But how? I've never done anything like that before.

Well, I started reading. I'm trying to learn the Computer Science theory related to compilers and interpreters. I'm studying languages like Scheme, Common Lisp, APL, Haskell, Julia, and Smalltalk. I'll also need to learn more about computational geometry. And I'm trying to learn to write code in Rust. On top of all that, because the goal is generating figures, there has to be a GUI IDE. I've never done one of those before, either.

Here's how I expect this process to work: I'll start with various experiments at implementing different features or portions of the overall language and the drawing application. Over time, the successful experiments could get combined into attempts at the whole thing. It will take quite a while. I'm not rushing it.

Of course, writing here at the end of 2022, I don't know how this project will turn out. There are very good reasons to believe I won't be able to finish it. And even if I do, maybe it won't work as well as I had hoped. Some of the features I want may turn out to conflict with each other in subtle ways. Creating a new language is a challenge, and creating a good language is an even greater one. Then there's the question of popularity, which seems to be mostly random chance. Even if I do get this all working, it's not likely anyone will ever hear about it.

But none of those things are a reason not to try.