Why ALT?
There are many programming languages out there, so why create yet another one? Well, I (Robbert) wanted to develop an alternative programming language that has all the important features I care about. Next to that, it is also a nice way to creatively express myself!
One particular topic I’ve been exploring extensively are strong type systems. I also like to develop software in strongly typed languages. I’ve recently started developing software in Typescript, after almost 15 years of programming in Scala. I really like Typescript and Scala, but both languages have one downside:
Types and values typically don’t mix. Types only exist at compile time, while values only exist at runtime
Type-level programming also requires a different skill set than programming with values, and that sucks from a DX perspective.
Then I stumbled upon the CUE language almost 1.5 years ago and it blew my mind. CUE is the first language (that I know of) where types and values can be freely mixed. Although CUE’s primary use case is managing configuration data, it is a full blown programming language on its own that is worthy of study.
The key insight that CUE brings is that types can be considered as sets of values and that types are values too. Another way to look at it is that all values are types, with a single value being a singleton type.
While CUE is great, I fail to understand the theory behind it. CUE’s theory stems from PhD work done by Marcel van Lohuizen on natural language systems. Also the CUE implementation is really hard to follow if you don’t have Marcel’s background.
So I’ve started researching sets-as-types, and found a small research area called semantic subtyping. Next to that, set-theoretic type systems are having a resurge lately, see Elixir and Verse.
All this gives me the assurance to continue developing ALT as a valid approach to a type checking - and more!