Programming Assignments
Assignment 1: Toybox Command Reimplementation
This assignment asks you to reimplement a Toybox command,
file
. The goal is to produce a working command that implements the same features as the original
Toybox implementation.
Due
Friday Sep 30 Oct 7 at 00:00 AM (Note: this is the night of the 29th the 6th.)
Requirements
- You need to reimplement the
file
command. - It should implement the same set of features as in the original Toybox's
file
implementation. - You should not use any external crates, but there are two exceptions. The first exception is when the original Toybox source uses an external library. If that is the case, you can find a Rust crate that provides similar functionality and use it. The second exception is for command line arguments. There are a number of good external crates that process command line arguments, and you can use any one of those. If you do use an external crate, you need to get approval first.
- Your command should work as a stand-alone executable. Note that the original Toybox produces a single executable for all commands that it supports.
- You should not use unsafe Rust. However, if it is unavoidable, you need to get approval first. You then need to carefully document it as comments on the source itself and explain why you have to use unsafe Rust.
- You might need to also reimplement some of the shared code, e.g.,
toys.h
,toybox/lib/
, etc. This is part of your assignment. - We grade your submission using the test cases from the original Toybox test source.
How to Submit
Submit on GitHub Classroom as follows.
- Accept the assignment invitation on GitHub Classroom.
- Make sure you push your code before the deadline. You need to be careful because you can keep pushing to the repo even after the deadline, which is what you should not do. The grading is be done for the last version pushed before the deadline.
Grading
TBA
Assignment 2: Simple Symbolic Execution Engine for Rust
This assignment asks you to implement a simple symbolic execution engine for Rust.
Due
Friday Nov 18 at 00:00 AM (Note: this is the night of the 17th.)