An experiment in programming languages.
People always ask “why write a new language? What’s different about it?”.
When people ask me that, I call this an art project. I work on it because I can’t not work on it. I refuse to reduce it to any fixed criteria. It isn’t and won’t be justified.
I refuse to say what it is because, in the end, I don’t know. And focusing on that up front is uselessly limiting.
Instead, let’s focus on a set of things that I don’t think should be as hard as they are in practice, and a set of assumptions that need to be questioned.
The julia implementation was the original prototype, but is no longer being updated and I’ve removed it from the head of the repo. It’s available in the history if wanted for reference.
The clojure implementation is far from complete, but the act of reimplementing it in a different paradigm has forced me to clarify a number of things and the clojure implementation is better in most ways.
The interpreter is really just a way to get my ideas clear before committing fully to the effort of generating assembly. But to be clear, this is intended to be a language that compiles to native code, via an llvm front end initially with the posibility of moving to native later on.
This is still very early. There’s no editor support, basically no tooling. All we have is a some data structures, an interpreter, and a repl. To run the repl:
From one of the impl dirs (“impl/N”), run
clojure -Arepl -X
or call janus.core/repl
from your editor. Note: nrepl in emacs handles
read
by taking stdin from the minibuffer. This is a little weird, but not
unusable.
For a primer on the language (in progress) See docs/language.org.
For a bit of justification, in spite of the above diatribe, see docs/aesthetics.org. That doc is a mosaic of years of my own notes. It’s sprawling, sometimes repetitive, and often (though I’ve tried to clarify) obscure. Enjoy it if you can, otherwise ignore it.
Copyright © Thomas Getgood 2025.
All rights reserved.
This code is unlicensed. If you want to use it, contact me and I’ll try to talk you out of it.