I have started working on creating a new programming language. The working name for now is Ikko, but that may change in the future.
The reason for creating this language was ultimately my frustrations with existing languages. There are so many languages that are quite good, but all of them have (in my mind) some unfortunate shortcoming. The interesting thing is the fact that these shortcomings are different between the languages. If some language were to take the union of the good aspects of a number of other languages (say, Python for syntax, Rust or Haskell for types, Go for tooling etc) it would be exactly what I’d want to program in day to day.
What kind of language is Ikko? It is imperative with a bit of a functional bent. It is garbage collected. It is statically typed with full, bi-directional type inference. The type system includes sum types, and there is no null value. Eventually, it will have type classes (called traits in Rust).
The language is in the very earliest stages of being written. It can run some small toy examples, but it cannot be used for anything useful yet. It doesn’t even support splitting code across multiple files! The syntax is also not final. The backend is presently an interpreter, but I want to add a backend that produces static binaries. It might be LLVM based.
I am very much still learning how to make the various parts of a language. The current state of the language could be viewed more as a learning project than the start of an actual language. There is no spec, but the goal is to eventually refine the behavior of the language through experimentation and then codify the results into a spec.
One of the major pieces of work that it needs is a type class system. Rather than work on the language itself, lately I have been working on learning how type inference for type classes works. Expect a blog post series explaining what I know by the new year.