On this page:
4.1 Operating System Support
4.2 Project Submission
4.3 Organizing Code
8.3

4 Course Project Logistics

4.1 Operating System Support

Our run-time system aims to support multiple operating systems, but this has not been tested thoroughly. We therefore assume you are running on a Linux machine. Your compiler must produce code for x64 using Linux system calls. We encourage you to try to support other operating systems by modifying your compiler to generate operating system specific parts based on the host machine, but all assignments must run on x64 linux.

4.2 Project Submission

We use GitHub for code management and code submission.

For milestones 0–2, you will work alone. You should commit to the repository in your https://github.students.cs.ubc.ca account named cpsc411project_<userid>. Each milestone should be submitting by creating a new branch as directed in the milestone description. For assignment 0, the branch will be assignment-0; for milestone 1, the branch will be milestone-1, etc.

These branches should exist in the repository when we provision it and include some starter code.

For milestones 3–11, you’ll work in teams. We will create a new team, with a team repository named cpsc411project_<teamid>. Each milestone should be submitted by creating a new branch as directed in the milestone description. They will follow the same pattern as for the individual milestones. Milestone 4 should be submitted in branch milestone-4, for example.

These branches should exist in the repository when we provision it and include some starter code.

We will mark and provide feedback on the project in the last commit in the relevant branch when the due date elapses. Please commit and push early and often.

You may work in other branches, but be sure to merge and push to the correct branch prior to the deadline.

4.3 Organizing Code

Each milestone must contain a file in the top-level directory of the branch named compiler.rkt that provides all the functions required in the milestone. Generally, this includes each pass defined in the milestone, and may include an interpreters, type checkers, and program validators.

Per Organizing Racket Code, you are not required to keep all of your code in this single file; the file is an interface. However, you must follow the instructions on organizing your code from Organizing Racket Code, as we will be grading code on design as well as functionality and need to be able to navigate code easily.

Regardless of how your code is organized, to simplify grading, you must add a comment with the exercise number before the code for each of your exercises:
; Exercise 20
(define (values-lang-fib n) ...)

For written exercises, indicate the exercise in the same way followed by a comment when the response to the exercise:
; Exercise 21
; When I compared the two implementations I found ...

For non-obvious test cases, add a comment explaining which language feature or edge case you are testing. For trivial tests, such as (check-exn exn:fail? (thunk (check-values-lang '()))), this is not necessary and will only make your code less readable.