Hello!

I am a senior at the University of Illinois at Urbana-Champaign majoring in Computer Science + Chemistry.

I enjoy working on programming languages, computer systems and open source software.

Projects

Most of my work is exploratory; I write software to learn and experiment with new ideas. Here are some of the things I've built:

nanoc is a compiler, assembler and linker for a small subset of C. It produces ELF-formatted executables for 32-bit x86 machines.

I wrote nanoc because I wanted a simple, portable and dependency-free compiler toolchain for my hobby operating system.

$ nanoc hello.c libnanoc.a
$ ./a.out
Hello, world!

Silk is a systems programming language that compiles to LLVM.

It is designed to be as simple and flexible as C, but more pleasant to write; to that end, it has an ergonomic syntax and a sophisticated type system that includes parametric types. I spent approximately six months designing and implementing the language and compiler, which is written entirely in OCaml.

〈Silk〉

Mako is an operating system for 32-bit x86-compatible computers.

It features a graphical user interface, an ext2 filesystem, a Lua interpreter and much more. I wrote it entirely from scratch in approximately six months to learn about how operating systems work (and learnt a lot more in the process.)

thorin is a simple debugger for C programs on linux and macOS.

It uses the ptrace mechanism to trace processes on Linux and mach ports on macOS, and reads debugging information from DWARF files. thorin was my first time writing Rust and exploring the System V ABI, a frustrating but very educational experience.

Golsp is an interpreted, general-purpose, lisp-like programming language implemented entirely in Go and itself.

It features a simple standard library and extensible module system, and its functional purity and Go runtime make it a good fit for highly concurrent applications. Golsp was my first time designing and implementing a programming language from scratch.

# factorial.golsp
def [factorial 0] 1
[def [factorial n]
  * n [factorial [- n 1]]
]
factorial 6 # => 720

jtrace is a JVM native agent that traces the state of a Java program as it executes.

I wrote this tool for CS 125, UIUC's introductory computer science class.

Java
Trace

Goals

I'm always looking for new projects to work on, especially things that I've never done before. Here's some of my todo-list right now:

  • Build a 3D rendering engine from scratch.
  • Write a bootloader.
  • Build an optimizing compiler for a functional programming language.
  • Learn Haskell.