Table of Contents
1. Projects and Languages
1.1. Languages
My most comfortable programming environment is definitely C, but I am adept at a number of others such as:
- Haskell
- Assembly (RISC-V, ARM, x86)
- Rust
- C++
- Python
- Java
- Lisp (Emacs, Racket)
My most interesting projects so far have all involved learning new languages, so this list is subject to change!
1.2. Projects
1.2.1. reedos: (A) Reed Operating System
Myself and Ethan McDonald (of the same year at Reed) wrote this operating system over a semester as a way to apply our skills from an Operating Systems class we were taking at the time. It is written entirely in Rust and targets the RISC-V platform. While hardly fully featured, it served as a base for experimentation for that semester and the following summer. The github repo can be found here.
1.2.2. P-Code Extension
My undergraduate thesis was working on extending the symbolic execution framework Crucible with the ability to reason about assembly directly as opposed to the source code it normally ingests. This process involved Ghidra, the reverse engineering tool, to produce a standardized assembly before feeding into Crucible itself. The majority of the work was on inferring structure from the assembly that then must be fed to Crucible. This in turn lead to learning about Dependently Typed Haskell and other rabbit holes of complexity. The code can be found here. While the code is far from finished, the logic and framework is mostly complete. The full pdf explaining and documenting my thesis can be found here.
1.2.3. Parallel Persistent Memory Model Implementation
During the summer after my Sophomore year, I implemented the memory model described in this paper in C under the guidance of one of its authors. In addition I several things such as a function calling convention suitable for the new memory model. In short, the model describes multiprocessing in the setting where executors can fail and restart independently of one another, possibly without the others observing. The model then describes productive computation in terms of idempotent segments of code. The code can be found here.