The goal of this assignment component is to reinforce what we have learned and discussed in this course with actual code that ideally can be integrated into some existing research effort, such as

  • the LIBRA program analysis framework, or
  • the Rusmart Rust-to-SMT transpiler, or
  • any research project you are interested in.

Introduction

The LLVM IR Bindings for Rust-based Analyzers (LIBRA) framework is a program analysis platform for LLVM IR written in Rust. The reason LIBRA chooses to lift LLVM IR into a Rust representation instead of plugging into LLVM (hence being developed in C++) is two-fold:

  • Rust provides compile-time social coordination which makes coordinated development amongst developers from a diverse background much easier.
  • Between two very steep learning curves (LLVM and Rust), the curve for Rust is slightly gentler and probably more useful in industrial and academic research.

The Rust-to-SMT Transpiler (Rusmart) is a Rust to satisfiability modulo theories (SMT) formulae transpiler that is purely implemented as Rust procedural macros.

Rusmart is also a programming language:

  • the operational semantics of a Rusmart program is represented by Rust code which is concretely executable, while
  • the denotational semantics of the program is seamlessly transpiled into SMT which can be symbolically reasoned.

Assignment

To qualify as a coding project, you need to develop an extension based on LIBRA or Rusmart or anything you are interested in which also does something related to program analysis.

Papers we read (or will be reading) in this course will provide some hints on what types of program analysis extensions we will be looking at. In particular, the paper you choose to read can be a good candidate implement and/or integrate into LIBRA.

You task for this assignment is to

  • define the coding project and
  • execute it to the fullest extent possible within this term.

Deliverables

Here are the deliverables we expect from the project:

  1. Proposal: Your project must be approved in advance by the instructor. This is done by submitting a title and an abstract in the HotCRP system (also known as paper registration in the system). Technically, you may submit the proposal at any time before the due date of the project. However, the sooner you submit the proposal, the sooner we can help you polish the idea and shape your research project, so it is highly encouraged for you to submit the proposal as early as possible.

  2. Pull Request: You will submit one or a series of GitHub pull requests (PRs) to the LIBRA or Rusmart repository to mark the code you develop. Familiarize yourself about the convention of submitting and writing PRs. Try to document and test extensively in your code, as your code will be retained in the codebase and will be the foundation for future cohorts of this course. This is also some pointer you can put in your CV / Resume as open-source contribution.

    In case you work on a research project that is not open-sourced, you don’t have to prepare any pull requests but you need to clearly document your coding contribution to the research project.

  3. Presentation: At the end of the term, you need to present your project to the whole class and upload your presentation slides (or a write-up if you prefer) in the HotCRP system and hit the “submit for review” button to mark completion. Your presentation should include a summary of existing work on your topic, as well as how your approach differs from them (i.e., the novelty bit). In the scenario where the whole project is not finished within this term, your presentation should clearly highlight the steps forward and how you plan to complete the project after the term ends.

Grading

Grading of a research project will be based on peer feedback. After your final project presentation, all attendees will evaluate the presentation on a scale of 1 (poor) to 5 (excellent) in HotCRP and the grade for this assignment component is simply the average score of the received evaluations.