My main curiosity is the tools that programmers use. Specifically, the core tool that programmers use almost every day: the compiler (or interpreter). In particular, I am interested in the design of languages, the choices that are made, and the implementation of languages.
Below are a list of some of my favourite projects I’ve worked on:
Krug is a systems programming language that I’ve been working on in Java. It’s what I consider to be a second revision of my previous language “Ark”.
The language features various modern constructs: traits, generics, slices, native utf-8 support, pattern matching, type inference, and more. The project is still a work in progress, but is soon to be open sourced. As of writing this, it’s implemented in Java and compiles to C code.
This was an exercise in programming graphical user interfaces without any existing libraries like Qt, Swing, etc. I wanted to write everything myself using nothing but a graphics API, in this case, OpenGL. This meant I had to implement everything from GUI component focus, text input, cursor movement, to more higher level abstractions: syntax highlighting, the command palette, and so on.
Here’s a preview video of the initial version, written in Java: here. As of 2016, I’m re-writing this in the Go programming language. You can see the most recent progress video of that here. And the source code is open source for the re-write too, which can be found here.
Ark is a compiled systems programming language. The compiler itself is written in Go. It uses the LLVM framework/architecture as the target backend, which provides a plethora of optimisations, tools, etc.
I worked on this project initially by myself, but some traction gained, and a few people showed up to help me make Ark a working piece of software.
The language has a lot of features: algebraic data types, modules, native utf-8 support, implicit interfaces, generics, and more.
You can see a demo of a simple OpenGL application written in Ark here.
Root was spawned from my curiosity in game programming. I wanted to know how the tools I was using worked, one of my favourite ways to learn how to do this is to implement one myself!
This project was written in Java and on top of LWJGL (a binding to the OpenGL API for Java). I wrote an example game with the framework, which you can see here.
I can think of a ton of improvements that could be made to Root, and maybe I’ll get round to implementing them (or re-writing the entire thing) someday. For now the source lives somewhere in a DropBox folder somewhere.