Student projects

Interpreter Design and Implementation

Design and implement an interpreter for a functional, lazy programming language with high-level vectorized operations. The interpreter will work on a multi-level stack-based intermediate representation called RIR.

Interests: low-level C++ programming

Links:

Super Optimization

Study how to improve the performance of the code of a language implementation, such as an interpreter core loop, with the use of a stochastic optimizer. A stochastic optimizer, such as STOKE, uses random search to generate extremely efficient versions of short code snippets.

Interests: assembly language, language implementation

Links:

Debugging Vectorized Code

Add support for debugging a vector language to an interpreter. This work can be extended with integration to an IDE. Support for breakpoints and watchpoint.

Interests: C++ programming

Links:

Record & Replay Debugging

Implement a debugger for the RIR interpreter that is able to record and replay executions deterministically with minimal overhead.

Interests: C++ programming

Links:

Design of a Regression Benchmark Framework

Engineer a framework for running regression benchmarks, and visualize the results on each commit of a system. Track performance and memory footprint, as well as other health indicators.

Interests: Scripting, System programming, JavaScript

Semantics Specification

Write down the formal semantics of a subset of the R language using a lightweight semantic specification tool such as Redex. Define the semantics of features such as objects and lazy evaluation. Implement a test suite that validates the correctness of the semantics.

Interests: programming languages

Links:

Executable Semantics

Starting with a semantics written in the Redex toolkit, convert that semantics to an abstract syntax tree interpreter in the Truffle/Graal format. Evaluate the performance of the original interpreter and the Truffle variant.

Interests: Java, programming language semantics

Links: